1. La rupture conceptuelle de PowerShell : Des objets, pas du texte

Contrairement aux shells Unix traditionnels qui transmettent des chaînes de caractères brutes, PowerShell manipule des objets .NET fortement typés. Lorsqu’une commande produit un résultat, elle transmet un objet doté de propriétés et de méthodes accessibles directement sans analyse textuelle complexe :

# En Bash : Analyse de texte sujette aux changements de format
ps aux | grep nginx | awk '{print $2}'

# En PowerShell : Accès direct à la propriété numérique 'Id' de l'objet Process
Get-Process -Name "explorer" | Select-Object -ExpandProperty Id

2. Le pipeline PowerShell : Filtrage, projection et boucles

La puissance d’administration s’exprime à travers les trois cmdlets majeures du pipeline :

# 1. Where-Object (?{ }) : Filtrage précis basé sur des conditions
# Rechercher tous les services Windows en arrêt configurés en démarrage automatique
Get-Service | Where-Object { .Status -eq 'Stopped' -and .StartType -eq 'Automatic' }

# 2. Select-Object : Projection de colonnes et calcul de propriétés
Get-Process | Sort-Object -Property WorkingSet64 -Descending | `
    Select-Object -First 5 Name, @{Name="RAM_Mo"; Expression={[math]::Round(.WorkingSet64 / 1MB, 2)}}

# 3. ForEach-Object (%{ }) : Traitement itératif d'objets
Get-Service -Name "w3svc" | ForEach-Object {
    if (.Status -eq 'Running') {
        Restart-Service -Name .Name -Force
        Write-Host "Le service $(.DisplayName) a été redémarré avec succès." -ForegroundColor Green
    }
}

3. Gestion d’erreurs d’entreprise avec Try / Catch / Finally

Pour industrialiser vos automatisations sous Windows Server, activez l’interception systématique des erreurs bloquantes :

[CmdletBinding()]
param (
    [Parameter(Mandatory=)]
    [string]
)

 = 'Stop'

try {
    Write-Host "[INFO] Connexion au serveur ..."
     = Get-CimInstance -ComputerName  -ClassName Win32_LogicalDisk | `
                Where-Object DriveType -eq 3
    
     | Export-Csv -Path "C:RapportsDisques_.csv" -NoTypeInformation
}
catch {
    Write-Error "[ERREUR CRITIQUE] Impossible d'interroger  : "
}
finally {
    Write-Host "[INFO] Fin de la séquence d'inventaire."
}

Exportation native : PowerShell intègre nativement les convertisseurs vers les formats universels : ConvertTo-Json, Export-Csv et ConvertTo-Html, facilitant l’intégration avec des plateformes tierces d’inventaire.