PowerShell Remoting
PowerShell Remoting (WinRM) permet d'exécuter des commandes sur des machines distantes. Indispensable pour administrer un parc Windows sans RDP.
Activer WinRM
# Sur la machine cible (en admin)
Enable-PSRemoting -Force
# Via GPO en entreprise : politique "Autoriser la gestion à distance via WS-Management"
# Vérifier l'état
Get-Service WinRM
Test-WSMan -ComputerName SRV-FILE01
Session interactive : Enter-PSSession
# Ouvrir une session interactive sur un serveur distant
Enter-PSSession -ComputerName SRV-DC01
# Avec des credentials différents
$cred = Get-Credential
Enter-PSSession -ComputerName SRV-DC01 -Credential $cred
# La ligne de commande indique le serveur distant
[SRV-DC01]: PS C:\Users\Admin\Documents>
# Quitter la session
Exit-PSSession
Exécution distante : Invoke-Command
# Commande sur un seul serveur
Invoke-Command -ComputerName SRV-FILE01 -ScriptBlock {
Get-DiskReport -ComputerName $env:COMPUTERNAME
}
# Commande sur PLUSIEURS serveurs en parallèle
$serveurs = @("SRV-DC01", "SRV-FILE01", "SRV-WEB01")
Invoke-Command -ComputerName $serveurs -ScriptBlock {
[PSCustomObject]@{
Serveur = $env:COMPUTERNAME
Uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
RAM_GB = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 1)
}
} | Sort-Object Serveur | Format-Table -AutoSize
# Passer une variable locale dans le ScriptBlock
$seuil = 20
Invoke-Command -ComputerName $serveurs -ArgumentList $seuil -ScriptBlock {
param($SeuilAlerte)
# $SeuilAlerte contient la valeur de $seuil
}