Powershell
De Linuxmemo.
| (120 versions intermédiaires masquées) | |||
| Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Windows_sysadmin]] | [[Catégorie:Windows_sysadmin]] | ||
| - | == Avoir de l'aide== | + | [[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 | ||
Get-Help commande -detailed | Get-Help commande -detailed | ||
Get-Help commande -full | Get-Help commande -full | ||
| + | ou | ||
| + | help commande | ||
*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 | ||
| + | $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== | ||
| + | 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 -''' | ||
==Restrictions== | ==Restrictions== | ||
| Ligne 18 : | Ligne 250 : | ||
Pour executer des scripts signés et non signés en local, il suffit de valider la commande | 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. | dans powershell attention lancer powershell en tant qu'admin pour ce faire. | ||
==Un shell a distance== | ==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 | + | Enter-PSSession -computer '''NOMMACHINE''' -port '''5985''' -credential domain01\user01 |
| - | Alias: etsn | + | Alias: etsn |
| + | * déactivation du shell a distance | ||
| + | Disable-PSRemoting | ||
| - | == | + | ==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 | ||
| + | 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 | ||
| + | Télécharger RSAT "Remote Server Admin Tools" nouveau AdminPack pour win2008srv.<br /> | ||
| + | http://www.microsoft.com/fr-fr/download/details.aspx?id=7887 | ||
*Tout les objet WMI | *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 | ||
| + | |||
| + | ==Astuces== | ||
| + | |||
| + | 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== | ||
| + | |||
| + | 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