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