about_Remote_Output

简短说明

介绍如何解释和格式化远程命令的输出。

长说明

在远程计算机上运行的命令的输出,可能类似于在本地计算机上运行的相同命令的输出,但存在一些重大差异。

本主题介绍如何解释、格式化和显示远程计算机上运行的命令的输出。

显示计算机名称

使用 Invoke-Command cmdlet 在远程计算机上运行命令时,该命令将返回一个对象,其中包含生成数据的计算机的名称。 PSComputerName 属性包含远程计算机名称。

对于许多命令,默认情况下会显示 PSComputerName。 例如,以下命令在两台远程计算机 Server01 和 Server02 上运行 Get-Culture 命令。 如下所示的输出包括运行命令的远程计算机的名称。

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

可以使用 Invoke-CommandHideComputerName 参数隐藏 PSComputerName 属性。 此参数专为仅从一台远程计算机收集数据的命令而设计。

以下命令在 Server01 远程计算机上运行 Get-Culture 命令。 它使用 HideComputerName 参数来隐藏 PSComputerName 属性和相关属性。

$invokeCommandSplat = @{
    ScriptBlock = {Get-Culture}
    ComputerName = 'Server01'
    HideComputerName = $true
}
Invoke-Command @invokeCommandSplat
LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

如果默认情况下未显示 PSComputerName 属性,则还可以显示该属性。

例如,以下命令使用 Format-Table cmdlet 将 PSComputerName 属性添加到远程 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

反序列化的对象

运行生成输出的远程命令时,命令输出通过网络传输回本地计算机。

由于无法通过网络传输实时 .NET 对象,因此实时对象将 序列化 或转换为对象的 XML 表示形式及其属性。 PowerShell 通过网络传输序列化的对象。

在本地计算机上,PowerShell 接收序列化的对象,并通过将序列化对象转换为标准 .NET 对象来反序列化该对象。

但是,反序列化对象不是实时对象。 它是序列化时对象的快照。 反序列化对象包括属性,但没有方法。 可以在 PowerShell 中使用和管理这些对象,包括在管道中传递这些对象、显示所选属性以及设置这些对象的格式。

大多数反序列化对象都将自动格式化为 Types.ps1xmlFormat.ps1xml 文件中的条目显示。 但是,本地计算机可能没有远程计算机上生成的所有对象的格式化文件。 如果未设置对象格式,则每个对象的所有属性都会显示在流式处理列表的控制台中。

当对象未自动设置格式时,可以使用格式 cmdlet(如 Format-TableFormat-List)设置所选属性的格式和显示。 或者,可以使用 Out-GridView cmdlet 在表中显示对象。

在使用本地计算机上没有的 cmdlet 的远程计算机上运行命令时,如果计算机上没有这些对象类型的格式化文件,该命令返回的对象可能无法按预期格式设置。 使用 Get-FormatDataExport-FormatData cmdlet 从另一台计算机获取数据格式设置。

收到对象时,某些对象类型(如 DirectoryInfo 对象和 GUID)将转换回实时对象。 这些对象不需要任何特殊的处理或格式设置。

对结果排序

计算机名称在 cmdlet 的 ComputerName 参数中的顺序决定 PowerShell 连接到远程计算机的顺序。 但是,结果按从远程计算机接收数据的顺序显示。

可以使用 Sort-Object cmdlet 对 PSComputerName 上的结果进行排序。 当你有对象的任何其他属性时,来自不同计算机的结果在输出中交错

请参阅