Polarys
PowerShell pour l'administration/Remoting et tâches planifiées

Remoting et tâches planifiées

PowerShell Remoting

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
}

Sessions persistantes

# Créer une session persistante (réutilisable)
$session = New-PSSession -ComputerName SRV-DC01

# Utiliser la session
Invoke-Command -Session $session -ScriptBlock { Get-Process | Select-Object -First 5 }

# Copier un fichier vers le serveur distant
Copy-Item -Path C:\Scripts\MonScript.ps1 -Destination C:\Scripts -ToSession $session

# Fermer et supprimer la session
Remove-PSSession -Session $session

Erreurs fréquentes

  • WinRM non activé sur la cible : Enable-PSRemoting -Force doit être exécuté sur CHAQUE machine cible (ou via GPO).
  • Pare-feu bloquant le port 5985/5986 : WinRM utilise HTTP sur 5985 et HTTPS sur 5986. Vérifier les règles de pare-feu.
  • Variables locales dans ScriptBlock : les variables de la session locale ne sont pas automatiquement disponibles dans Invoke-Command. Utiliser -ArgumentList ou $using:variable.

À retenir

  • Enable-PSRemoting -Force sur chaque cible (ou GPO).
  • Enter-PSSession = shell interactif distant.
  • Invoke-Command = exécution parallèle sur N machines → très puissant pour les parcs.
  • $using:variable ou -ArgumentList pour passer des variables locales.

Quiz de validation

Quiz - 2 questions

1. Comment passer une variable locale $seuil dans un ScriptBlock Invoke-Command ?

2. Quel port WinRM utilise par défaut pour HTTP ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.