Powershell
De Linuxmemo.
(→Un shell a distance) |
|||
(35 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Windows_sysadmin]] | [[Catégorie:Windows_sysadmin]] | ||
+ | [[Catégorie:PowerShell]] | ||
+ | ==Avoir de l'aide== | ||
+ | |||
+ | *sur une commande | ||
+ | Get-Help commande | ||
+ | Get-Help commande -examples | ||
+ | Get-Help commande -detailed | ||
+ | Get-Help commande -full | ||
+ | ou | ||
+ | help commande | ||
+ | |||
+ | *liste des commandes | ||
+ | Get-Command | ||
+ | Get-Command -verb Get | ||
+ | Get-Command -noun Service | ||
+ | Get-Command -commandType alias | ||
+ | Get-Command Get-* | ||
+ | Get-Command *-Service | ||
+ | Get-Verb | ||
+ | |||
+ | *lister tout les propriétés et méthodes d'un objet | ||
+ | $maVariable | Get-Member | ||
+ | $maVariable | Get-Member -MemberType Method | ||
+ | $maVariable | Get-Member -MemberType Property | ||
+ | $maVariable | Get-Member -MemberType Property CreateTime | ||
+ | Get-ItemProperty | ||
+ | appel méthode | ||
+ | $maVariable.ToUpper() | ||
+ | |||
+ | *lister les Provider | ||
+ | Get-PsProvider | ||
+ | |||
+ | *Listage des classes WMI | ||
+ | Get-WmiObject –List | ||
+ | $i=0;Get-WmiObject -list | foreach{$i=$i+1} ; Write-Host "Il y a $i membre(s)" | ||
+ | |||
+ | *Connaitre sa version de PowerShell | ||
+ | $host.version | ||
+ | $PSVersionTable | ||
+ | |||
==Script (exécution, mode de sécurité)== | ==Script (exécution, mode de sécurité)== | ||
*fichier ayant pour extension .PS1 | *fichier ayant pour extension .PS1 | ||
Ligne 25 : | Ligne 65 : | ||
Affichage des propriétés sous forme de liste | Affichage des propriétés sous forme de liste | ||
Get-ChildItem | Format-List | Get-ChildItem | Format-List | ||
+ | |||
ou toutes les propriétés | ou toutes les propriétés | ||
Get-ChildItem | Format-List * | Get-ChildItem | Format-List * | ||
- | Get-ChildItem | Format-List -Property name, length | + | |
+ | ou juste les propriétés name et lenght | ||
+ | Get-ChildItem | '''Format-List -Property''' name, length | ||
+ | |||
ou une seul propriété | ou une seul propriété | ||
(Get-ChildItem nomfichier).CreationTime | (Get-ChildItem nomfichier).CreationTime | ||
Ligne 36 : | Ligne 80 : | ||
Affichage personnalisé des propriétés | Affichage personnalisé des propriétés | ||
Get-ChildItem | Format-Custom | Get-ChildItem | Format-Custom | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
===Filtres=== | ===Filtres=== | ||
- | *wc = Measure-Object | + | *wc = '''Measure-Object''' |
Get-Command | Measure-Object | Get-Command | Measure-Object | ||
- | *grep = Select-String | + | *grep = '''Select-String''' |
+ | |||
+ | *grep sur les méthodes et les propriétés = '''Where-Object méthodes/propriétés -eq quelquechose''' | ||
+ | Get-service |''' Where-Object status -eq Stopped''' | ||
- | * | + | *'''Select-Object''' (select) |
- | Get- | + | Get-WmiObject win32_userprofile | Select-Object LocalPath |
===Guillemets=== | ===Guillemets=== | ||
Ligne 71 : | Ligne 112 : | ||
`r = retour chariot | `r = retour chariot | ||
... | ... | ||
+ | |||
+ | ===Appel des méthodes=== | ||
+ | $a = 12 | ||
+ | $a.GetType() | ||
+ | Int32 | ||
===Valeur de propriétés=== | ===Valeur de propriétés=== | ||
Ligne 79 : | Ligne 125 : | ||
Taille du fichier config.sys : 10 octets | Taille du fichier config.sys : 10 octets | ||
- | == | + | ===Opérateurs de comparaisons=== |
+ | Les opérateurs de comparaison pour le shell, par défaut, ne sont pas sensibles à la casse lors de la comparaison des chaînes : | ||
+ | '''-eq Equal (case insensitive)''' | ||
+ | -ne Not equal (case insensitive) | ||
+ | -ge Greater than or equal (case insensitive) | ||
+ | -gt Greater than (case insensitive) | ||
+ | -lt Less than (case insensitive) | ||
+ | -le Less than or equal (case insensitive) | ||
+ | '''-like Wildcard comparison (case insensitive)''' | ||
+ | -notlike Wildcard comparison (case insensitive) | ||
+ | '''-match Regular expression comparison (case insensitive)''' | ||
+ | -notmatch Regular expression comparison (case insensitive) | ||
+ | -replace Replace operator (case insensitive) | ||
+ | -contains Containment operator (case insensitive) | ||
+ | -notcontains Containment operator (case insensitive) | ||
- | + | -ieq Case insensitive equal | |
- | + | -ine Case insensitive not equal | |
- | + | -ige Case insensitive greater than or equal | |
- | + | -igt Case insensitive greater than | |
- | + | -ile Case insensitive less than or equal | |
- | + | -ilt Case insensitive less than | |
- | + | -ilike Case insensitive equal | |
+ | -inotlike Case insensitive equal | ||
+ | -imatch Case insensitive regular expression comparison | ||
+ | -inotmatch Case insensitive regular expression comparison | ||
+ | -ireplace Case insensitive replace operator | ||
+ | -icontains Case insensitive containment operator | ||
+ | -inotcontains Case insensitive containment operator | ||
- | + | -ceq Equal (case sensitive) | |
- | + | -cne Not equal (case sensitive) | |
+ | -cge Greater than or equal (case sensitive) | ||
+ | -cgt Greater than (case sensitive) | ||
+ | -clt Less than (case sensitive) | ||
+ | -cle Less than or equal (case sensitive) | ||
+ | -clike Wildcard comparison (case sensitive) | ||
+ | -cnotlike Wildcard comparison (case sensitive) | ||
+ | -cmatch Regular expression comparison (case sensitive) | ||
+ | -cnotmatch Regular expression comparison (case sensitive) | ||
+ | -creplace Replace operator (case sensitive) | ||
+ | -ccontains Containment operator (case sensitive) | ||
+ | -cnotcontains Containment operator (case sensitive) | ||
- | + | -is Is of a type | |
- | + | -isnot Is not of a type | |
- | + | -as As a type, no error if conversion fails | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
==Les profiles== | ==Les profiles== | ||
Ligne 119 : | Ligne 186 : | ||
%windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1 | %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1 | ||
+ | |||
+ | *fichier profile pour commande automatique au lancement du shell | ||
+ | notepad $profile | ||
+ | Import-Module nommodule | ||
+ | start-transcript | ||
+ | ... | ||
==Vocabulaire== | ==Vocabulaire== | ||
Ligne 189 : | Ligne 262 : | ||
[[Winrm]] | [[Winrm]] | ||
- | Enter-PSSession -computer | + | Enter-PSSession -computer '''NOMMACHINE''' -port '''5985''' -credential domain01\user01 |
Alias: etsn | Alias: etsn | ||
* déactivation du shell a distance | * déactivation du shell a distance | ||
Disable-PSRemoting | Disable-PSRemoting | ||
- | + | ==commandes utiles== | |
- | Get-Process | + | Get-Process, Start-Process, Stop-Process, Wait-Process, Debug-Process |
Get-Service | Get-Service | ||
Get-EventLog | Get-EventLog | ||
Ligne 207 : | Ligne 280 : | ||
Set-Service | Set-Service | ||
Get-WinEvent | Get-WinEvent | ||
- | Get-WmiObject | + | Get-WmiObject, Get-WmiObject -List, Get-WmiObject -List | Where-Object { $_.name -match 'disk'}, '''Get-WmiObject win32_computersystem''' |
==les Objets (Outils intégrés)== | ==les Objets (Outils intégrés)== | ||
Ligne 215 : | Ligne 288 : | ||
*utilitaires: | *utilitaires: | ||
fsutil,etc... | fsutil,etc... | ||
- | *Tout les objet . | + | *Tout les objet .NET http://technet.microsoft.com/fr-fr/library/dd347574.aspx |
+ | New-Object -TypeName System.Diagnostics.EventLog | ||
+ | New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application | ||
+ | $AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application | ||
+ | $AppLog | Get-Member -MemberType Method | ||
+ | $AppLog.Clear() | ||
+ | $AppLog | ||
+ | Méthodes statiques: | ||
[espace de nom. <type .net>]::<Membre-statique> | [espace de nom. <type .net>]::<Membre-statique> | ||
[System.DateTime]::Now | [System.DateTime]::Now | ||
http://msdn.microsoft.com/fr-fr/library/gg145045.aspx | http://msdn.microsoft.com/fr-fr/library/gg145045.aspx | ||
+ | *Tout les objets COM | ||
+ | Vous devez spécifier le paramètre ComObject avec l'identificateur programmatique (ou ProgId) de la classe COM à utiliser.</b> | ||
+ | Vous pouvez créer les objets WSH en spécifiant ces ProgId : WScript.Shell, WScript.Network, Scripting.Dictionary et Scripting.FileSystemObject. Les commandes suivantes créent ces objets : | ||
+ | New-Object -ComObject WScript.Shell | ||
+ | New-Object -ComObject WScript.Network | ||
+ | New-Object -ComObject Scripting.Dictionary | ||
+ | New-Object -ComObject Scripting.FileSystemObject | ||
+ | gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName | ||
+ | Lister tout les ProgId | ||
+ | dir REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")} | ||
+ | ou | ||
+ | get-wmiobject Win32_COMClass | ||
+ | |||
+ | $WshShell = New-Object -ComObject WScript.Shell | ||
+ | $WshShell | Get-Member | ||
+ | $lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk") | ||
*Tout les objet fs | *Tout les objet fs | ||
Get-ChildItem c:\ | Get-ChildItem c:\ | ||
Ligne 262 : | Ligne 358 : | ||
*Lecteurs | *Lecteurs | ||
+ | $obj = New-Object -com Wscript.Network | ||
+ | $obj.MapNetworkDrive("x:", "\\serveur\partage") | ||
*Services | *Services | ||
Ligne 273 : | Ligne 371 : | ||
*Sécurité | *Sécurité | ||
+ | |||
+ | *Effacer un profile utilisateur | ||
+ | ( Get-WmiObject -Class Win32_UserProfile | Where-Object { $_.LocalPath -eq 'c:\users\user' } ).Delete() | ||
==Ressources== | ==Ressources== | ||
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx | http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx |
Version actuelle en date du 20 février 2017 à 09:41
Sommaire |
[modifier] Avoir de l'aide
- sur une commande
Get-Help commande Get-Help commande -examples Get-Help commande -detailed Get-Help commande -full ou help commande
- liste des commandes
Get-Command Get-Command -verb Get Get-Command -noun Service Get-Command -commandType alias Get-Command Get-* Get-Command *-Service Get-Verb
- lister tout les propriétés et méthodes d'un objet
$maVariable | Get-Member $maVariable | Get-Member -MemberType Method $maVariable | Get-Member -MemberType Property $maVariable | Get-Member -MemberType Property CreateTime Get-ItemProperty appel méthode $maVariable.ToUpper()
- lister les Provider
Get-PsProvider
- Listage des classes WMI
Get-WmiObject –List $i=0;Get-WmiObject -list | foreach{$i=$i+1} ; Write-Host "Il y a $i membre(s)"
- Connaitre sa version de PowerShell
$host.version $PSVersionTable
[modifier] Script (exécution, mode de sécurité)
- fichier ayant pour extension .PS1
- exécution
depuis une invite de commande
powershell c:\monscript.ps1
double clic, il faut modifier les paramètres de sécurité implémentés dans PowerShell car par défaut il est impossible de lancer un script sans passer par l’interpréteur PowerShell.
Get-ExecutionPolicy
PowerShell propose 4 modes de sécurité différents:
Restricted - No scripts can be run. Windows PowerShell can be used only in interactive mode. AllSigned - Only scripts signed by a trusted publisher can be run. RemoteSigned - Downloaded scripts must be signed by a trusted publisher before they can be run. Unrestricted - No restrictions; all Windows PowerShell scripts can be run.
changer de mode et d’autoriser l’exécution de script locaux
Set-ExecutionPolicy RemoteSigned
[modifier] Dénomination verbe-substantif
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714428%28v=vs.85%29.aspx
[modifier] Syntaxe
[modifier] Formatage d'affichage des propriétés
Affichage des propriétés sous forme de liste
Get-ChildItem | Format-List ou toutes les propriétés Get-ChildItem | Format-List * ou juste les propriétés name et lenght Get-ChildItem | Format-List -Property name, length ou une seul propriété (Get-ChildItem nomfichier).CreationTime
Affichage des propriétés sous forme de Table
Get-ChildItem | Format-Table -autosize
Affichage de la seul propriété par défaut au format large table
Get-ChildItem | Format-Wide
Affichage personnalisé des propriétés
Get-ChildItem | Format-Custom
[modifier] Filtres
- wc = Measure-Object
Get-Command | Measure-Object
- grep = Select-String
- grep sur les méthodes et les propriétés = Where-Object méthodes/propriétés -eq quelquechose
Get-service | Where-Object status -eq Stopped
- Select-Object (select)
Get-WmiObject win32_userprofile | Select-Object LocalPath
[modifier] Guillemets
- double ""
substitution de variable
$a = 'bonjour' $b = 'monde' Write-Host "$a $b" bonjour monde
- simple
protection de chaine
[modifier] Caractère d'échappement
AltGr + 7 donne le backtick "`"
`n = Saut de ligne `r = retour chariot ...
[modifier] Appel des méthodes
$a = 12 $a.GetType() Int32
[modifier] Valeur de propriétés
$(objet.propriété)
$a = Get-ChilItem c:\config.sys Write-Host "Taille du fichier $($a.Name) : $($a.Length) octets" Taille du fichier config.sys : 10 octets
[modifier] Opérateurs de comparaisons
Les opérateurs de comparaison pour le shell, par défaut, ne sont pas sensibles à la casse lors de la comparaison des chaînes :
-eq Equal (case insensitive) -ne Not equal (case insensitive) -ge Greater than or equal (case insensitive) -gt Greater than (case insensitive) -lt Less than (case insensitive) -le Less than or equal (case insensitive) -like Wildcard comparison (case insensitive) -notlike Wildcard comparison (case insensitive) -match Regular expression comparison (case insensitive) -notmatch Regular expression comparison (case insensitive) -replace Replace operator (case insensitive) -contains Containment operator (case insensitive) -notcontains Containment operator (case insensitive)
-ieq Case insensitive equal -ine Case insensitive not equal -ige Case insensitive greater than or equal -igt Case insensitive greater than -ile Case insensitive less than or equal -ilt Case insensitive less than -ilike Case insensitive equal -inotlike Case insensitive equal -imatch Case insensitive regular expression comparison -inotmatch Case insensitive regular expression comparison -ireplace Case insensitive replace operator -icontains Case insensitive containment operator -inotcontains Case insensitive containment operator
-ceq Equal (case sensitive) -cne Not equal (case sensitive) -cge Greater than or equal (case sensitive) -cgt Greater than (case sensitive) -clt Less than (case sensitive) -cle Less than or equal (case sensitive) -clike Wildcard comparison (case sensitive) -cnotlike Wildcard comparison (case sensitive) -cmatch Regular expression comparison (case sensitive) -cnotmatch Regular expression comparison (case sensitive) -creplace Replace operator (case sensitive) -ccontains Containment operator (case sensitive) -cnotcontains Containment operator (case sensitive)
-is Is of a type -isnot Is not of a type -as As a type, no error if conversion fails
[modifier] Les profiles
- Type Utilisateurs
%UserProfile%\My Documents\WindowsPowerShell\profile.ps1
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- Type Machine (pour tout les utilisateurs)
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
%windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1
- fichier profile pour commande automatique au lancement du shell
notepad $profile Import-Module nommodule start-transcript ...
[modifier] Vocabulaire
- "item"
fichier, répertoire, clé de la base de registre.
- "fournisseur ou Provider po PsProvider"
Ce sont les objets sur lesquels la commande agis:
Alias, Env, C, D, E,...,Z , Function, HKLM, KHCU, Variable, Cert.
Exemple:
Get-ChildItem C: Get-ChildItem Alias: Get-ChildItem Env: Get-ChildItem Function: Get-ChildItem HKLM: Get-ChildItem Variable:
[modifier] Les modules
Microsoft Script Center: http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx ou http://gallery.technet.microsoft.com/ScriptCenter/
Les modules sont soit des fichier .psd1 ou .psm1, soit des binaires (.dll), soit des modules dynamique en ram.
Si vous êtes seul à executer les commandes, il est préferable de positionner les modules dans votre profile Powershell;
soit %USERPROFILE%\Documents\WindowsPowerShell\Modules\MonModule ou %DocumentsUser%\WindowsPowerShell\Modules\MonModule
Si vous executez des commandes depuis des taches planifiées ou si les commandes peuvent être executé par tout le monde , il est préferable d’installer dans le répertoire
%SystemRoot%, soit %WINDIR%\System32\WindowsPowerShell\v1.0\Modules\MonModule
Il est important que le nom du répertoire « MonModule » soit identique aux noms des fichiers avec l extension *.PSD1 & *.PSM1.
- liste les modules chargés
Get-Module ou Get-PSSnapin
- liste les modules diponible mais non encore chargés
Get-Module –ListAvailable
- Charger un module
Import-module module
- Decharger un module
Remove-Module module
ServerManager -
[modifier] Restrictions
- connaitre son niveau d'execution
get-executionpolicy Restricted
Pour executer des scripts signés et non signés en local, il suffit de valider la commande
Set-ExecutionPolicy RemoteSigned ou Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope Process
dans powershell attention lancer powershell en tant qu'admin pour ce faire.
[modifier] Un shell a distance
- PowerShell Doit être installé sur la machine local et sur la machine distante.
- Les 2 machines doivent être configurés pour une gestion a distance.
Enable-PSRemoting ou Winrm
Enter-PSSession -computer NOMMACHINE -port 5985 -credential domain01\user01 Alias: etsn
- déactivation du shell a distance
Disable-PSRemoting
[modifier] commandes utiles
Get-Process, Start-Process, Stop-Process, Wait-Process, Debug-Process Get-Service Get-EventLog Restart-Computer Test-Connection Clear-EventLog Get-EventLog Get-Hotfix Get-Process Get-Service Set-Service Get-WinEvent Get-WmiObject, Get-WmiObject -List, Get-WmiObject -List | Where-Object { $_.name -match 'disk'}, Get-WmiObject win32_computersystem
[modifier] les Objets (Outils intégrés)
- cmdlets (mini-exe réalisant des fonctions préséfinies
Out-GridView,
- utilitaires:
fsutil,etc...
- Tout les objet .NET http://technet.microsoft.com/fr-fr/library/dd347574.aspx
New-Object -TypeName System.Diagnostics.EventLog New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application $AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application $AppLog | Get-Member -MemberType Method $AppLog.Clear() $AppLog
Méthodes statiques:
[espace de nom. <type .net>]::<Membre-statique> [System.DateTime]::Now
http://msdn.microsoft.com/fr-fr/library/gg145045.aspx
- Tout les objets COM
Vous devez spécifier le paramètre ComObject avec l'identificateur programmatique (ou ProgId) de la classe COM à utiliser.</b> Vous pouvez créer les objets WSH en spécifiant ces ProgId : WScript.Shell, WScript.Network, Scripting.Dictionary et Scripting.FileSystemObject. Les commandes suivantes créent ces objets :
New-Object -ComObject WScript.Shell New-Object -ComObject WScript.Network New-Object -ComObject Scripting.Dictionary New-Object -ComObject Scripting.FileSystemObject gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
Lister tout les ProgId
dir REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")} ou get-wmiobject Win32_COMClass
$WshShell = New-Object -ComObject WScript.Shell $WshShell | Get-Member $lnk = $WshShell.CreateShortcut("$Home\Desktop\PSHome.lnk")
- Tout les objet fs
Get-ChildItem c:\
- Tout les objet AD
Get-ADObject
Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv.
http://www.microsoft.com/fr-fr/download/details.aspx?id=7887
- Tout les objet WMI
Get-WMIObject Win32_NetworkAdapterConfiguration
http://msdn.microsoft.com/fr-fr/library/windows/desktop/aa394572%28v=vs.85%29.aspx
- Tout les objet du registre
Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix
- Getting Credentials From The Command Line
PS> $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds" PS> Set-ItemProperty $key ConsolePrompting True PS> Get-Credential
[modifier] Astuces
F7 -- Pour avoir l'historique des commandes
[modifier] Recettes
- Registre
PS >Set-Location HKCU:\Software\Microsoft\Windows\CurrentVersion\Run PS >Get-ItemProperty .
To set:
PS >(Get-ItemProperty .).MyProgram c:\temp\MyProgram.exe PS >Set-ItemProperty . MyProgram d:\Lee\tools\MyProgram.exe PS >(Get-ItemProperty .).MyProgram d:\Lee\tools\MyProgram.exe
To remove:
PS >Remove-ItemProperty . MyProgram PS >(Get-ItemProperty .).MyProgram
To creating new:
PS >New-ItemProperty . -Name MyProgram -Value c:\temp\MyProgram.exe
To copying:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:
ACL
PS >Get-Acl HKLM:\Software
- Lecteurs
$obj = New-Object -com Wscript.Network $obj.MapNetworkDrive("x:", "\\serveur\partage")
- Services
Get-Service Get-Service OC* Get-Service | Where-Object {$_.status -eq "running"} Restart-Service "nom service" Set-Service "nom service" -StartupType Automatic Stop-Service "nom service" Start-Service "nom service"
- Sécurité
- Effacer un profile utilisateur
( Get-WmiObject -Class Win32_UserProfile | Where-Object { $_.LocalPath -eq 'c:\users\user' } ).Delete()
[modifier] Ressources
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx