RUBRIQUE
about_Remote_Output
DESCRIPTION COURTE
Décrit comment interpréter et mettre en forme la sortie de
commandes distantes.
DESCRIPTION LONGUE
La sortie d'une commande exécutée sur un ordinateur distant peut
ressembler à celle de la même commande exécutée sur un ordinateur
local, mais il existe des différences significatives.
Cette rubrique explique comment interpréter, mettre en forme et
afficher la sortie des commandes exécutées sur les ordinateurs
distants.
AFFICHAGE DU NOM DE L'ORDINATEUR
Lorsque vous utilisez l'applet de commande Invoke-Command pour
exécuter une commande sur un ordinateur distant, la commande
retourne un objet qui inclut le nom de l'ordinateur qui a généré
les données. Le nom de l'ordinateur distant est stocké dans la
propriété PSComputerName.
Pour de nombreuses commandes, la propriété PSComputerName est
affichée par défaut. Par exemple, la commande suivante exécute
une commande Get-Culture sur deux ordinateurs distants, Server01
et Server02. La sortie, qui s'affiche ci-dessous, inclut les noms
des ordinateurs distants sur lesquels la commande est exécutée.
C:\PS> invoke-command -script {get-culture} -comp Server01, Server02
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US Anglais (États-Unis) Server01
1033 es-AR Espagnol (Argentine) Server02
Vous pouvez utiliser le paramètre HideComputerName de l'applet de
commande Invoke-Command pour masquer la propriété PSComputerName.
Ce paramètre est conçu pour les commandes qui rassemblent des
données d'un seul ordinateur distant.
La commande suivante exécute une commande Get-Culture sur
l'ordinateur distant Server01. Elle utilise le paramètre
HideComputerName pour masquer la propriété PSComputerName et les
propriétés associées.
C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName
LCID Name DisplayName
---- ---- -----------
1033 en-US Anglais (États-Unis)
Vous pouvez également afficher la propriété PSComputerName si
elle n'est pas affichée par défaut.
Par exemple, les commandes suivantes utilisent l'applet de
commande Format-Table pour ajouter la propriété PSComputerName à
la sortie d'une commande Get-Date distante.
C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
C:\PS> $dates | format-table DateTime, PSComputerName -auto
DateTime PSComputerName
-------- --------------
Lundi 21 juillet 2008 19:16:58 Server011
Lundi 21 juillet 2008 19:16:58 Server02
AFFICHAGE DE LA PROPRIÉTÉ MACHINENAME
Plusieurs applets de commande, notamment Get-Process, Get-Service
et Get-EventLog, ont un paramètre ComputerName qui obtient les
objets sur un ordinateur distant. Ces applets de commande n'utilisant
pas la communication à distance Windows PowerShell, vous pouvez
les utiliser même su les ordinateurs qui ne sont pas configurés
pour la communication à distance dans Windows PowerShell.
Les objets retournés par ces applets de commande stockent le nom
de l'ordinateur distant dans la propriété MachineName. (Ces objets
n'ont pas de propriété PSComputerName.)
Par exemple, cette commande obtient le processus PowerShell sur
les ordinateurs distants Server01 et Server02. L'affichage par
défaut n'inclut pas la propriété MachineName.
C:\PS> get-process powershell -computername server01, server02
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
920 38 97524 114504 575 9.66 2648 powershell
194 6 24256 32384 142 3020 powershell
352 27 63472 63520 577 3.84 4796 powershell
Vous pouvez utiliser l'applet de commande Format-Table pour
afficher la propriété MachineName des objets processus.
Par exemple, la commande suivante enregistre les processus dans
la variable $p, puis utilise un opérateur de pipeline (|) pour
envoyer les processus dans $p à la commande Format-Table. La
commande utilise le paramètre Property de Format-Table pour
inclure la propriété MachineName dans l'affichage.
C:\PS> $p = get-process powershell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto
ID ProcessName MachineName
-- ----------- -----------
2648 powershell Server02
3020 powershell Server01
4796 powershell Server02
La commande plus complexe suivante ajoute la propriété
MachineName à l'affichage de processus par défaut. Elle utilise
des tables de hachage pour spécifier des propriétés calculées.
Heureusement, vous n'avez pas à la comprendre pour l'utiliser.
(Notez que le backtick [`] est le caractère de continuation.)
C:\PS> $p = get-process powershell -comp Server01, Server02
C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, `
@{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
@{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
@{Label="CPU(s)";Expression={if ($_.CPU -ne $()){ $_.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName MachineName
------- ------ ----- ----- ----- ------ -- ----------- -----------
920 38 97560 114532 576 2648 powershell Server02
192 6 24132 32028 140 3020 powershell Server01
438 26 48436 59132 565 4796 powershell Server02
OBJETS DÉSÉRIALISÉS
Lorsque vous exécutez des commandes distantes qui génèrent une
sortie, la sortie de la commande est retransmise via le réseau à
l'ordinateur local.
Étant donné que la plupart des objets Microsoft .NET Framework en
direct (tel que les objets retournés par les applets de commande
Windows PowerShell) ne peuvent pas être transmis sur le réseau,
ils sont " sérialisés ". En d'autres termes, les objets en direct
sont convertis en représentations XML de l'objet et ses propriétés.
L'objet sérialisé XML est ensuite transmis via le réseau.
Sur l'ordinateur local, Windows PowerShell reçoit l'objet sérialisé
XML et le " désérialise " en le convertissant en un objet .NET
Framework standard.
Toutefois, l'objet désérialisé n'est pas un objet en direct. Il
s'agit d'une capture instantanée de l'objet au moment où il a été
sérialisé et elle inclut les propriétés, mais pas les méthodes.
Vous pouvez utiliser et gérer ces objets dans Windows PowerShell,
notamment en les passant dans les pipelines, en affichant des
propriétés sélectionnées et en les mettant en forme.
La plupart des objets désérialisés sont automatiquement mis en
forme pour l'affichage selon les entrées dans les fichiers
Types.ps1xml ou Format.ps1xml. Toutefois, l'ordinateur local peut
ne pas avoir de fichiers de mise en forme pour tous les objets
désérialisés générés sur un ordinateur distant. Lorsque les
objets ne sont pas mis en forme, toutes les propriétés de chaque
objet apparaissent dans la console dans une liste de diffusion en
continu.
Lorsque les objets ne sont pas mis en forme automatiquement, vous
pouvez utiliser les applets de commande de mise en forme, telles
que Format-Table ou Format-List, pour mettre en forme et afficher
les propriétés sélectionnées. Vous pouvez également utiliser
l'applet de commande Out-GridView pour afficher les objets dans
une table.
Par ailleurs, si vous exécutez une commande sur un ordinateur
distant qui utilise des applets de commande que vous n'avez pas
sur votre ordinateur local, les objets retournés par la commande
peuvent ne pas être mis en forme correctement, car vous ne
disposez pas des fichiers de mise en forme pour ces objets sur
votre ordinateur. Pour obtenir les données de mise en forme d'un
autre ordinateur, utilisez les applets de commande Get-FormatData
et Export-FormatData.
Certains types d'objets, tels que les objets DirectoryInfo et
GUID, sont reconvertis en objets en direct lorsqu'ils sont reçus.
Ces objets ne nécessitent aucune gestion ni mise en forme spéciale.
CLASSEMENT DES RÉSULTATS
L'ordre des noms d'ordinateurs dans le paramètre ComputerName
des applets de commande détermine l'ordre dans lequel Windows
PowerShell se connecte aux ordinateurs distants. Toutefois, les
résultats apparaissent dans l'ordre dans lequel l'ordinateur
local les reçoit, qui peut être un ordre différent.
Pour modifier l'ordre des résultats, utilisez l'applet de commande
Sort-Object. Vous pouvez effectuer le tri en fonction de la propriété
PSComputerName ou MachineName. Vous pouvez également trier selon une
autre propriété de l'objet afin d'intercaler les résultats de
différents ordinateurs.
VOIR AUSSI
about_Remote
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Out-GridView
Select-Object