PowerShell
Aide-mémoire PowerShell : cmdlets, pipeline et objets, filtres, boucles, fonctions, fichiers et administration Active Directory.
Découverte et aide
PowerShell manipule des objets (pas du texte). Les commandes suivent le
schéma Verbe-Nom (ex. Get-Process, Set-Item).
| Commande | Rôle |
|---|---|
Get-Command *service* |
chercher une cmdlet |
Get-Help Get-Process -Examples |
aide + exemples d'une cmdlet |
Get-Member |
lister propriétés et méthodes d'un objet |
Get-Alias |
voir les alias (ls, cd, cat…) |
Update-Help |
télécharger l'aide à jour |
Get-Process | Get-Member # que puis-je faire sur un processus ?
Get-Help Get-ADUser -Online # ouvre la doc dans le navigateur
Variables et types
- Déclarer :
$nom = "Alice"· typer :[int]$age = 30. - Automatiques :
$_(objet courant du pipeline),$?(succès de la dernière commande),$PSVersionTable,$args. - Tableaux :
$t = 1,2,3·$t[0]· ajouter$t += 4. - Table de hachage :
$h = @{ nom = "Alice"; age = 30 }·$h.nom. $null,$true,$false.
Opérateurs
Les opérateurs sont textuels, précédés d'un tiret (pas de ==).
| Catégorie | Opérateurs |
|---|---|
| Comparaison | -eq -ne -lt -le -gt -ge |
| Logique | -and -or -not (ou !) |
| Texte | -like (jokers *), -match (regex), -replace, -split, -join |
| Ensemble | -contains, -in |
"srv-01" -like "srv-*" # True
"a,b,c" -split "," # a b c
$mots -join " " # recolle un tableau en chaîne
Le pipeline et les objets
Le | passe des objets d'une cmdlet à l'autre ; $_ désigne l'objet courant.
Get-Service |
Where-Object { $_.Status -eq "Running" } |
Select-Object Name, StartType |
Sort-Object Name
Filtrer, trier, sélectionner
| Cmdlet | Rôle |
|---|---|
Where-Object { $_.X -gt 5 } |
filtrer (alias ?) |
Select-Object Name, Id |
choisir des colonnes |
Select-Object -First 5 |
limiter |
Sort-Object X -Descending |
trier |
ForEach-Object { … } |
agir sur chaque objet (alias %) |
Measure-Object -Sum |
compter / additionner |
Group-Object X |
regrouper |
Get-ChildItem C:\ -File |
Sort-Object Length -Descending |
Select-Object Name, Length -First 5
Conditions et boucles
if ($x -gt 5) { "grand" } elseif ($x -eq 5) { "pile" } else { "petit" }
switch ($jour) {
"Lun" { "début" }
"Ven" { "presque !" }
default { "milieu" }
}
foreach ($i in 1..5) { $i } # 1..5 = plage
while ($n -lt 3) { $n++ }
do { $n-- } while ($n -gt 0)
Fonctions
function Get-Cube {
param(
[Parameter(Mandatory)][int]$Nombre
)
return $Nombre * $Nombre * $Nombre
}
Get-Cube -Nombre 3 # 27
- Les paramètres se déclarent avec
param(...);[Parameter(Mandatory)]les rend obligatoires. - Une fonction renvoie tout ce qu'elle émet (pas seulement
return).
Fichiers et système
| Cmdlet | Équivalent | Rôle |
|---|---|---|
Get-ChildItem |
ls / dir |
lister |
Get-Content |
cat |
lire un fichier |
Set-Content / Add-Content |
écrire / ajouter | |
Copy-Item / Move-Item |
cp / mv |
copier / déplacer |
Remove-Item |
rm |
supprimer |
Test-Path |
vérifier l'existence | |
Get-Service / Get-Process |
services / processus |
Get-Content journal.log | Select-String "ERROR" # ~ grep
Get-Service | Where-Object Status -eq "Stopped"
Chaînes et formatage
- Interpolation (guillemets doubles) :
"Bonjour $nom, il est $(Get-Date -Format HH:mm)". - Guillemets simples = littéral (pas d'interpolation).
- Formater une sortie :
... | Format-Table,Format-List,Out-GridView. - Exporter :
Export-Csv data.csv -NoTypeInformation,ConvertTo-Json,Out-File.
Active Directory
Prérequis :
Import-Module ActiveDirectory(outils RSAT / rôle AD DS).
Utilisateurs
New-ADUser -Name "J Test" -SamAccountName jtest `
-AccountPassword (Read-Host -AsSecureString) -Enabled $true
Get-ADUser -Filter * -SearchBase "OU=RH,DC=entreprise,DC=local"
Set-ADUser jtest -Department "RH"
Enable-ADAccount jtest ; Disable-ADAccount jtest
Set-ADAccountPassword jtest -Reset
Groupes
New-ADGroup -Name "GG_RH" -GroupScope Global -GroupCategory Security
Add-ADGroupMember "GG_RH" jtest
Get-ADGroupMember "GG_RH"
OU, ordinateurs, domaine
New-ADOrganizationalUnit -Name "RH" -Path "DC=entreprise,DC=local"
Move-ADObject -Identity "<DN>" -TargetPath "OU=RH,DC=entreprise,DC=local"
Get-ADComputer -Filter * ; Get-ADDomain ; Get-ADForest
- Les mots de passe sont des SecureString.
-Path/-SearchBaseattendent un DN (Distinguished Name).- Adopter une convention de nommage des groupes (
GG_,GDL_).
Bonnes pratiques et pièges
- Opérateurs textuels (
-eq, pas==). - Autoriser les scripts :
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned. - Toujours privilégier les cmdlets (objets) au parsing de texte.
`(accent grave) = caractère de continuation de ligne.- Lancer PowerShell en administrateur pour les tâches système / AD.
- Explorer un objet inconnu avec
Get-Memberavant de scripter.
Pour les fondamentaux (objets, pipeline), voir les mémos SCR-05 à SCR-07 et WIN-15.