about_Remote_Output
Mis à jour: mai 2014
S'applique à: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
RUBRIQUE
about_Remote_Output
DESCRIPTION COURTE
Décrit comment interpréter et mettre en forme la sortie des commandes distantes.
DESCRIPTION DÉTAILLÉE
La sortie d'une commande exécutée sur un ordinateur distant peut s'apparenter à la sortie de la même commande sur un ordinateur local, mais il existe certaines différences importantes.
Cette rubrique explique comment interpréter, mettre en forme et afficher la sortie des commandes exécutées sur des ordinateurs distants.
AFFICHAGE DU NOM D'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 ayant généré les données. Le nom de l'ordinateur distant est stocké dans la propriété PSComputerName.
Pour la plupart des 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 apparaît en dessous, inclut les noms des ordinateurs distants sur lesquels la commande a été exécutée.
C:\PS> invoke-command -script {get-culture} -comp Server01, Server02
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) Server01
1033 es-AR Spanish (Argentina) Server02
Vous pouvez utiliser le paramètre HideComputerName d'Invoke-Command pour masquer la propriété PSComputerName. Ce paramètre est conçu pour les commandes qui collectent des données à partir 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 English (United States)
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 distante Get-Date.
C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
C:\PS> $dates | format-table DateTime, PSComputerName -auto
DateTime PSComputerName
-------- --------------
Monday, July 21, 2008 7:16:58 PM Server01
Monday, July 21, 2008 7:16:58 PM Server02
AFFICHAGE DE LA PROPRIÉTÉ MACHINENAME
Plusieurs applets de commande, y compris 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 de Windows PowerShell®, vous pouvez même les utiliser sur des ordinateurs qui ne sont pas configurés pour la communication à distance dans Windows PowerShell.
Les objets que ces applets de commande retournent 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 du processus.
Par exemple, la commande suivante enregistre les processus dans la variable $p, puis utilise un opérateur de pipeline (|) pour envoyer les processus de $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 suivante plus complexe ajoute la propriété MachineName à l'affichage du processus par défaut. Elle utilise les tables de hachage pour spécifier les propriétés calculées. Heureusement, il est inutile de la comprendre pour l'utiliser.
(Notez que l'accent grave [`] 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.
Comme la plupart des objets Microsoft .NET Framework actifs (tels que les objets que les applets de commande Windows PowerShell retournent) ne peuvent pas être transmis sur le réseau, les objets actifs sont « sérialisés ». En d'autres termes, les objets actifs sont convertis en représentations XML de l'objet et en ses propriétés. Ensuite, l'objet sérialisé XML est transmis sur le réseau.
Sur l'ordinateur local, Windows PowerShell reçoit l'objet sérialisé XML et le « désérialise » en convertissant l'objet XML en un objet .NET Framework standard.
Cependant, l'objet désérialisé n'est pas un objet actif. Il correspond à un instantané de l'objet au moment où il a été sérialisé et inclut des propriétés, mais pas de méthodes. Vous pouvez utiliser et gérer ces objets dans Windows PowerShell, y compris en les transmettant dans des pipelines, en affichant les 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 par les entrées des fichiers Types.ps1xml ou Format.ps1xml. Cependant, 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 s'affichent sur 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. Ou vous pouvez utiliser l'applet de commande Out-GridView pour afficher les objets dans une table.
En outre, 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 que la commande retourne 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 la mise en forme des données à partir 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 convertis en objets actifs lors de leur réception. Ces objets ne nécessitent aucune manipulation ou mise en forme particulière.
CLASSEMENT DES RÉSULTATS
L'ordre des noms d'ordinateur dans le paramètre ComputerName des applets de commande détermine l'ordre dans lequel Windows PowerShell se connecte aux ordinateurs distants. Cependant, les résultats s'affichent dans l'ordre où l'ordinateur local les reçoit, ordre qui peut être différent.
Pour modifier l'ordre des résultats, utilisez l'applet de commande Sort-Object. Vous pouvez trier sur la propriété PSComputerName ou MachineName. Vous pouvez également trier sur une autre propriété de l'objet afin d'alterner les résultats des différents ordinateurs.
VOIR AUSSI
about_Remote
about_Remote_Variables
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Out-GridView
Select-Object