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