Powershell
De Linuxmemo.
 (→Syntaxe)  | 
		|||
| (78 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é)==  | ||
| + | *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  | ||
| + | |||
| + | ==Dénomination verbe-substantif==  | ||
| + | http://msdn.microsoft.com/en-us/library/windows/desktop/ms714428%28v=vs.85%29.aspx  | ||
| + | |||
==Syntaxe==  | ==Syntaxe==  | ||
| - | ===Formatage d'affichage===  | + | ===Formatage d'affichage des propriétés===  | 
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 20 : | Ligne 83 : | ||
===Filtres===  | ===Filtres===  | ||
| - | *wc = Measure-Object  | + | *wc = '''Measure-Object'''  | 
  Get-Command | 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  | ||
===Guillemets===  | ===Guillemets===  | ||
| Ligne 36 : | Ligne 107 : | ||
===Caractère d'échappement===  | ===Caractère d'échappement===  | ||
| - | AltGr + 7 donne le backtick `  | + | AltGr + 7 donne le backtick "`"  | 
| - | =  | + | `n = Saut de ligne  | 
| + | `r = retour chariot  | ||
| + | ...  | ||
| - | + | ===Appel des méthodes===  | |
| - | + |   $a = 12  | |
| - | + |   $a.GetType()  | |
| - | + |   Int32  | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ===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  | |
| + | |||
| + | ===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==  | ||
| + | |||
| + | *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  | ||
| + |  ...  | ||
| - | + | ==Vocabulaire==  | |
;"item"  | ;"item"  | ||
| Ligne 73 : | Ligne 210 : | ||
==Les modules==  | ==Les modules==  | ||
| - | + | Microsoft Script Center: http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx ou http://gallery.technet.microsoft.com/ScriptCenter/  | |
| - | Les modules sont des fichier .psd1 ou .psm1  | + | 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   | + | 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   | + | 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    | *liste les modules chargés    | ||
| Ligne 112 : | Ligne 258 : | ||
*PowerShell Doit être installé sur la machine local et sur la machine distante.  | *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.  | *Les 2 machines doivent être configurés pour une gestion a distance.  | ||
| - | + |  Enable-PSRemoting  | |
| + |  ou  | ||
| + |  [[Winrm]]  | ||
| - |   Enter-PSSession -computer   | + |   Enter-PSSession -computer '''NOMMACHINE''' -port '''5985''' -credential domain01\user01  | 
| - | Alias: etsn  | + |  Alias: etsn  | 
| + | * déactivation du shell a distance  | ||
| + |  Disable-PSRemoting  | ||
| - | ==Outils intégrés==  | + | ==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'''  | ||
| + | |||
| + | ==les Objets (Outils intégrés)==  | ||
*cmdlets (mini-exe réalisant des fonctions préséfinies  | *cmdlets (mini-exe réalisant des fonctions préséfinies  | ||
| - | Out-GridView,  | + |  Out-GridView,  | 
*utilitaires:  | *utilitaires:  | ||
| - | fsutil,  | + |  fsutil,etc...  | 
| - | *Tout les objet .net  | + | *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  | *Tout les objet fs  | ||
| - | + |  Get-ChildItem c:\  | |
*Tout les objet AD  | *Tout les objet AD  | ||
| - | Get-ADObject     | + |  Get-ADObject     | 
| - | + | Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv.<br />  | |
| - | Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv. http://www.microsoft.com/fr-fr/download/details.aspx?id=7887  | + | http://www.microsoft.com/fr-fr/download/details.aspx?id=7887  | 
*Tout les objet WMI  | *Tout les objet WMI  | ||
| - | Get-WMIObject Win32_NetworkAdapterConfiguration  | + |  Get-WMIObject Win32_NetworkAdapterConfiguration  | 
| + | http://msdn.microsoft.com/fr-fr/library/windows/desktop/aa394572%28v=vs.85%29.aspx  | ||
*Tout les objet du registre  | *Tout les objet du registre  | ||
| - | Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix''  | + |  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  | ||
==Astuces==  | ==Astuces==  | ||
F7 -- Pour avoir l'historique des commandes  | F7 -- Pour avoir l'historique des commandes  | ||
| + | |||
| + | ==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()  | ||
==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