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’un 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