Powershell
De Linuxmemo.
Sommaire |
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 AllSigned RemoteSigned Unrestricted
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 * 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
Appel des méthodes
$a = 12 $a.GetType() Int32
Filtres
- wc = Measure-Object
Get-Command | Measure-Object
- grep = Select-String
- Where-Object
Get-service | Where-Object {$_.status -eq 'Stopped'}
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 ...
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
Avoir de l'aide
- sur un commande
Get-Help commande Get-Help commande -examples Get-Help commande -detailed Get-Help commande -full ou help commande
- liste des commandes
Get-Command
- lister tout les propriétés et méthodes d'un objet
$maVariable | Get-Member Get-ItemProperty appel méthode $maVariable.ToUpper()
- 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
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
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:
Les modules
Click Start, point to Administrative Tools, and then click Module Active Directory pour Windows PowerShell .
Les modules sont des fichier .psd1 ou .psm1
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
- 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.
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.
Démarrez le service Windows Remote Management (WinRM). "net start winrm"
Enter-PSSession -computer Server01 -port 90 -credential domain01\user01
Alias: etsn
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
[espace de nom. <type .net>]::<Membre-statique> [System.DateTime]::Now
http://msdn.microsoft.com/fr-fr/library/gg145045.aspx
- 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
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
- 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é
Ressources
http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx