about_Remote_Output

Description courte

Décrit comment interpréter et mettre en forme la sortie des commandes distantes.

Description longue

La sortie d’une commande exécutée sur un ordinateur distant peut ressembler à la sortie 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 des ordinateurs distants.

Affichage du nom de l’ordinateur

Lorsque vous utilisez l’applet Invoke-Command de commande 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. La propriété PSComputerName contient le nom de l’ordinateur distant.

Pour de nombreuses commandes, PSComputerName s’affiche par défaut. Par exemple, la commande suivante exécute une Get-Culture commande sur deux ordinateurs distants, Server01 et Server02. La sortie, qui apparaît ci-dessous, inclut les noms des ordinateurs distants sur lesquels la commande s’est exécutée.

Invoke-Command -ScriptBlock {Get-Culture} -ComputerName 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 pour Invoke-Command 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 Get-Culture commande sur l’ordinateur distant Server01. Il utilise le paramètre HideComputerName pour masquer la propriété PSComputerName et les propriétés associées.

$invokeCommandSplat = @{
    ScriptBlock = {Get-Culture}
    ComputerName = 'Server01'
    HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
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 Format-Table de commande pour ajouter la propriété PSComputerName à la sortie d’une commande distante Get-Date .

$invokeCommandSplat = @{
    ScriptBlock = {Get-Date}
    ComputerName = 'Server01', 'Server02'
}
Invoke-Command @invokeCommandSplat |
    Format-Table DateTime, PSComputerName -AutoSize
DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

Objets désérialisés

Lorsque vous exécutez des commandes distantes qui génèrent une sortie, la sortie de commande est transmise sur le réseau à l’ordinateur local.

Étant donné que les objets .NET actifs ne peuvent pas être transmis sur le réseau, les objets en direct sont sérialisés ou convertis en représentations XML de l’objet et de ses propriétés. PowerShell transmet l’objet sérialisé sur le réseau.

Sur l’ordinateur local, PowerShell reçoit l’objet sérialisé et le désérialise en convertissant l’objet sérialisé en objet .NET standard.

Toutefois, l’objet désérialisé n’est pas un objet actif. Il s’agit d’une instantané de l’objet au moment de la sérialisation. L’objet désérialisé 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 l’affichage par les entrées dans les fichiers ou Format.ps1xml les Types.ps1xml fichiers. Toutefois, l’ordinateur local peut ne pas avoir de fichiers de mise en forme pour tous les objets 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 Out-GridView de commande pour afficher les objets d’une table.

Lorsque 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 comme prévu si vous n’avez pas les fichiers de mise en forme pour ces types d’objets sur votre ordinateur. Vous utilisez les applets de commande et Export-FormatData les Get-FormatData applets de commande pour obtenir des données de mise en forme à partir d’un autre ordinateur.

Certains types d’objets, tels que les objets DirectoryInfo et les GUID, sont convertis en objets actifs lorsqu’ils sont reçus. Ces objets n’ont pas besoin d’une gestion ou d’une mise en forme particulières.

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 apparaissent dans l’ordre dans lequel les données sont reçues des ordinateurs distants.

Vous pouvez utiliser l’applet Sort-Object de commande pour trier les résultats sur psComputerName. Lorsque vous n’importe quelle autre propriété de l’objet, les résultats de différents ordinateurs sont entrelacés entrelacés dans la sortie

Voir aussi