Dans cet article je vais vous présenter la fonction PSSession qui nous permet d’exécuter des commandes Powershell sur des ordinateurs distants. PSSession se base sur le service "Windows Remote Management (WS-Management)". Ce service doit donc être démarré et configurer pour accepter les connections.
Enter-PSSession "mycomputer.sekki.fr"
IpConfig
Exit
Ce mode est intéressant mais un peu limité. Pour automatiser mes commandes, je vais avoir besoin d'executer des scripts complet. Pour cela je vais m’intéresser à la commande "New-PSSession" qui me permettra d’exécuter des blocs de commande complet.
#Initialisation.
$serveur = "mycomputer.sekki.fr"
#Ouvre une session permanente sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute une commande sur le poste distant.
Invoke-Command -Session $mySession { Ipconfig }
}
$serveur = "mycomputer.sekki.fr"
#Ouvre une session permanente sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute une commande sur le poste distant.
Invoke-Command -Session $mySession { Ipconfig }
}
La commande "Get-PSSession" permet de voir les sessions ouvertes.
Get-PSSession
Au besoin, les sessions peuvent être déconnecte et reconnecté avec les commandes suivantes.
#Deconnecter une session.
Disconnect-PSSession $mySession
Get-PSSession
Disconnect-PSSession $mySession
Get-PSSession
#Reconnecter une session.
Connect-PSSession $mysession
Get-PSSession
Connect-PSSession $mysession
Get-PSSession
Pour fermer une session permanente, nous utilisons la commande "Remove-PSSession".
#Ferme une session ouverte avec "New-PSSession".
Remove-PSSession $mysession
Get-PSSession
Remove-PSSession $mysession
Get-PSSession
Exemple 1 : Exécuter un script à distance.
#Initialisation.
$serveur = "mycomputer.sekki.fr"
#Script à exécuter.
$script = {
#Script à exécuter sur la session distante.
Ipconfig
}
#Ouvre une session sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute le script sur le poste distant.
Invoke-Command -Session $mySession $script
#Ferme la session.
Remove-PSSession $mySession
}
$serveur = "mycomputer.sekki.fr"
#Script à exécuter.
$script = {
#Script à exécuter sur la session distante.
Ipconfig
}
#Ouvre une session sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute le script sur le poste distant.
Invoke-Command -Session $mySession $script
#Ferme la session.
Remove-PSSession $mySession
}
Exemple 2 : Installer un Msi avec PSSession.
#Initialisation.
$serveur = "mycomputer.sekki.fr"
$remoteTemp = "\\"+$serveur+"\C$\temp"
#Copier la source sur le poste distant.
Copy-Item -Path "D:\Sources\Agent.msi" -Destination $remoteTemp
#Ouvre une session sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute le script sur le poste distant.
Invoke-Command -Session $mySession { Start-Process msiexec -argumentlist "/i C:\temp\agent.msi /qn" }
#Ferme la session.
Remove-PSSession $mySession
}
$serveur = "mycomputer.sekki.fr"
$remoteTemp = "\\"+$serveur+"\C$\temp"
#Copier la source sur le poste distant.
Copy-Item -Path "D:\Sources\Agent.msi" -Destination $remoteTemp
#Ouvre une session sur le poste distant.
$mySession = New-PSSession $serveur
if ($mySession)
{
#Exécute le script sur le poste distant.
Invoke-Command -Session $mySession { Start-Process msiexec -argumentlist "/i C:\temp\agent.msi /qn" }
#Ferme la session.
Remove-PSSession $mySession
}