Powershell
De Linuxmemo.
(→Avoir de l'aide) |
|||
(92 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 | + | *sur une commande |
Get-Help commande | Get-Help commande | ||
Get-Help commande -examples | Get-Help commande -examples | ||
Ligne 20 : | Ligne 13 : | ||
*liste des commandes | *liste des commandes | ||
Get-Command | 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 | *lister tout les propriétés et méthodes d'un objet | ||
$maVariable | Get-Member | $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== | ||
+ | |||
+ | ===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 | ||
+ | |||
+ | ===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 | ||
+ | |||
+ | ===Guillemets=== | ||
+ | ;double "" | ||
+ | substitution de variable | ||
+ | $a = 'bonjour' | ||
+ | $b = 'monde' | ||
+ | Write-Host "$a $b" | ||
+ | bonjour monde | ||
+ | |||
+ | ;simple '' | ||
+ | protection de chaine | ||
+ | |||
+ | ===Caractère d'échappement=== | ||
+ | |||
+ | 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" | ||
+ | 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.<br/> | ||
+ | Exemple:<br/> | ||
+ | Get-ChildItem C: | ||
+ | Get-ChildItem Alias: | ||
+ | Get-ChildItem Env: | ||
+ | Get-ChildItem Function: | ||
+ | Get-ChildItem HKLM: | ||
+ | Get-ChildItem Variable: | ||
==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 64 : | 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