Skip to content

Remoting

Le remoting permet d'agir sur une autre machine à distance. C'est l'essence même du Powershell.

Objectifs

À la fin de ce chapitre, vous serez capable de :

  • Identifier les prérequis réseau/sécurité pour le remoting PowerShell.
  • Activer et configurer WinRM pour permettre l’exécution distante.
  • Comprendre la logique d’un script qui exécute une action sur une machine distante.

Il y a quelques prérequis à vérifier sur les 2 machines :

  • Dans VBox, réseau, il faut choisir réseau interne
  • Win10 dans WORKGROUP et changer le nom de machine pour PC1 et PC2
  • Désactiver le par-feu (possible dans le cas d'un labo mais pas dans une entreprise)
  • IPV6 désactivé et IPV4 avec adresse fixe - les 2 VM doivent pouvoir « ping » le nom de l’autre
  • Compte faisant partie du groupe administrateurs sur la machine distante (controler l'utilité de l'utilisateur qui lance le script avec droit admin)
  • Autorisation pour l'exécution des scripts

Afin de pouvoir faire du remoting, il faut activer le service winrm (Windows Remote Managment) et définir les hôtes à distance

Sur les 2 PC exécuter en tant qu’admin :

  • Enable-PSRemoting -SkipNetworkProfileCheck -Force
  • Set-Item WSMan:\\localhost\\Client\\TrustedHosts *
  • Restart-Service winrm redémarrer le service winrm
  • Redemarrer les machines

Le code du script lancé sur PC1 pour la création distante d’un fichier sur PC2 :

powershell
# Le PC de destination, doit être accessible avec un ping
$compName="PC2"

# Va contenir le nom d'utilisateur et mot de passe SecureString
$cred=Get-Credential

# Ouverture de la session sur la machine de destination
$sess=New-PSSession -ComputerName $compName -Credential $cred

# Avec l'accès à la machine de destination, on envoie la commande pour ajouter un fichier sur le bureau
Invoke-Command -Session $sess -ScriptBlock{New-Item -Path C:\Users\ISI\Desktop -Name toto.txt}

# On supprime la session
Remove-PSSession $sess

Variables dans un ScriptBlock distant

Les variables locales ne sont pas automatiquement disponibles dans le ScriptBlock distant. Deux approches :

  • $using:nomVariable (recommandé, PowerShell 3+) : préfixe la variable locale pour l'injecter dans le bloc distant.
  • –ArgumentList : passe les valeurs comme paramètres, à réceptionner avec param(…) dans le bloc.
powershell
$dest = "C:\Users\ISI\Desktop"
$name = "toto.txt"

# Avec $using:
Invoke-Command -Session $sess -ScriptBlock {
    New-Item -Path $using:dest -Name $using:name
}

# Avec -ArgumentList
Invoke-Command -Session $sess -ArgumentList $dest, $name -ScriptBlock {
    param($path, $n)
    New-Item -Path $path -Name $n
}

Voici un exemple simple, basé sur le même principe, mais cette fois pour exécuter une commande à distance sur le PC2 :

powershell
# Le PC de destination doit être accessible
$compName = "PC2"

# Demande les identifiants
$cred = Get-Credential

# Ouvre une session distante
$sess = New-PSSession -ComputerName $compName -Credential $cred

# Exécute une commande sur la machine distante
Invoke-Command -Session $sess -ScriptBlock {
    Get-ComputerInfo | Select-Object CsName, WindowsProductName, OsVersion
}

# Ferme la session
Remove-PSSession $sess

Et voici une exemple qui copie un fichier du PC2, sur le PC1 depuis le PC1 :

powershell
# Le PC de destination doit être accessible
$compName = "PC2"

# Demande les identifiants
$cred = Get-Credential

# Ouvre une session distante
$sess = New-PSSession -ComputerName $compName -Credential $cred

# Copie un fichier distant vers le PC local
Copy-Item -Path "C:\Temp\infos.txt" -Destination "C:\Temp\infos_copie.txt" -FromSession $sess

# Ferme la session
Remove-PSSession $sess

Info

Dans ces exemples l'on utilise une authentification simple par login avec Get-Credential.

Résumé

  • Le remoting s’appuie sur WinRM et nécessite une configuration cohérente des deux côtés.
  • Les prérequis (réseau, pare-feu, droits admin, policy) conditionnent le succès des commandes distantes.
  • Les scripts distants doivent gérer correctement paramètres et authentification.

Informations complémentaires

📥 Support remoting pour PS (PDF)