about_Remote_Output
简短说明
介绍如何解释远程命令的输出并设置其格式。
长说明
在远程计算机上运行的命令的输出可能类似于在本地计算机上运行的同一命令的输出,但存在一些显著差异。
本主题说明如何解释、格式化和显示远程计算机上运行的命令的输出。
显示计算机名称
使用 Invoke-Command
cmdlet 在远程计算机上运行命令时,该命令将返回一个 对象,该对象包含生成数据的计算机的名称。 PSComputerName 属性包含远程计算机名称。
对于许多命令, PSComputerName 默认显示。 例如,以下命令在两台 Get-Culture
远程计算机 Server01 和 Server02 上运行命令。 输出(如下所示)包括运行命令的远程计算机的名称。
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
可以使用 的 HideComputerName 参数 Invoke-Command
隐藏 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 中使用和管理这些对象,包括在管道中传递它们、显示所选属性以及设置其格式。
大多数反序列化的对象都会自动设置格式,以便由 或 Format.ps1xml
文件中的条目Types.ps1xml
显示。 但是,本地计算机可能没有远程计算机上生成的所有对象的格式设置文件。 当对象未设置格式时,每个对象的所有属性都显示在控制台中的流式处理列表中。
当对象未自动设置格式时,可以使用格式设置 cmdlet(如 Format-Table
或 Format-List
)来设置和显示所选属性的格式。 或者,可以使用 Out-GridView
cmdlet 在表中显示对象。
在远程计算机上运行使用本地计算机上没有的 cmdlet 的命令时,如果计算机上没有这些对象类型的格式设置文件,则该命令返回的对象的格式设置可能不会按预期进行设置。 使用 Get-FormatData
和 Export-FormatData
cmdlet 从另一台计算机获取格式设置数据。
某些对象类型(如 DirectoryInfo 对象和 GUID)在收到时会转换回实时对象。 这些对象不需要任何特殊处理或格式设置。
对结果进行排序
cmdlet 的 ComputerName 参数中计算机名称的顺序决定了 PowerShell 连接到远程计算机的顺序。 但是,结果按从远程计算机接收数据的顺序显示。
可以使用 Sort-Object
cmdlet 对 PSComputerName 上的结果进行排序。 当对象的任何其他属性时,不同计算机的结果在输出中交错