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-Command
的 HideComputerName 参数隐藏 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.ps1xml
或 Format.ps1xml
文件中的条目显示。 但是,本地计算机可能没有远程计算机上生成的所有对象的格式化文件。 如果未设置对象格式,则每个对象的所有属性都会显示在流式处理列表的控制台中。
当对象未自动设置格式时,可以使用格式 cmdlet(如 Format-Table
或 Format-List
)设置所选属性的格式和显示。 或者,可以使用 Out-GridView
cmdlet 在表中显示对象。
在使用本地计算机上没有的 cmdlet 的远程计算机上运行命令时,如果计算机上没有这些对象类型的格式化文件,该命令返回的对象可能无法按预期格式设置。 使用 Get-FormatData
和 Export-FormatData
cmdlet 从另一台计算机获取数据格式设置。
收到对象时,某些对象类型(如 DirectoryInfo 对象和 GUID)将转换回实时对象。 这些对象不需要任何特殊的处理或格式设置。
对结果排序
计算机名称在 cmdlet 的 ComputerName 参数中的顺序决定 PowerShell 连接到远程计算机的顺序。 但是,结果按从远程计算机接收数据的顺序显示。
可以使用 Sort-Object
cmdlet 对 PSComputerName 上的结果进行排序。 当你有对象的任何其他属性时,来自不同计算机的结果在输出中交错