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 -ForceSet-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 :
# 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 $sessVariables 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 avecparam(…)dans le bloc.
$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 :
# 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 $sessEt voici une exemple qui copie un fichier du PC2, sur le PC1 depuis le PC1 :
# 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 $sessInfo
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.
