Partager via


À propos de la sortie distante

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 ressembler à la sortie de la même exécution de commande 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 des 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, PSComputerName s’affiche 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 ci-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 de 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. Il 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 Get-Date distante.

$dates = invoke-command -script {get-date} -computername Server01, Server02
$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, 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’utilisent pas la communication à distance PowerShell. Vous pouvez donc les utiliser même sur des 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 de 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 du processus par défaut. Il utilise des tables de hachage pour spécifier des propriétés calculées. Heureusement, vous n’avez pas à le 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}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{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 sur le réseau à l’ordinateur local.

Étant donné que la plupart des objets Microsoft .NET Framework actifs (tels que les objets retournés par les applets de commande PowerShell) ne peuvent pas être transmis sur le réseau, les objets en direct sont « sérialisés ». En d’autres termes, les objets en direct sont convertis en représentations XML de l’objet et de ses propriétés. Ensuite, l’objet sérialisé basé sur XML est transmis sur le réseau.

Sur l’ordinateur local, PowerShell reçoit l’objet sérialisé basé sur XML et le « désérialise » en convertissant l’objet XML en objet .NET Framework standard.

Toutefois, l’objet désérialisé n’est pas un objet actif. Il s’agit d’un instantané de l’objet au moment où il a été sérialisé, et il inclut des propriétés, mais aucune méthode. Vous pouvez utiliser et gérer ces objets dans PowerShell, notamment les transmettre dans des pipelines, afficher les propriétés sélectionnées et les mettre en forme.

La plupart des objets désérialisés sont automatiquement mis en forme pour être affichés par des 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 qui ont été 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.

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 retournés par la commande risquent de ne pas être correctement mis en forme, car vous n’avez pas les fichiers de mise en forme de ces objets sur votre ordinateur. Pour obtenir des données de mise en forme à 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 les GUID, sont reconvertis en objets actifs lorsqu’ils sont reçus. Ces objets n’ont pas besoin d’une gestion ou d’une mise en forme particulière.

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 PowerShell se connecte aux ordinateurs distants. Toutefois, les résultats s’affichent dans l’ordre dans lequel l’ordinateur local les reçoit, ce qui peut être un ordre 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 que les résultats de différents ordinateurs soient entrecoupés.

VOIR AUSSI

about_Remote

about_Remote_Variables

Format-Table

Get-Process

Get-Service

Invoke-Command

Select-Object