about_Remote_Output
Краткое описание
Описывает, как интерпретировать и форматировать выходные данные удаленных команд.
Подробное описание
Выходные данные команды, выполненной на удаленном компьютере, могут выглядеть как выходные данные той же команды, выполняемой на локальном компьютере, но существуют некоторые существенные различия.
В этом разделе объясняется, как интерпретировать, форматировать и отображать выходные данные команд, выполняемых на удаленных компьютерах.
Отображение имени компьютера
При использовании командлета Invoke-Command
для выполнения команды на удаленном компьютере команда возвращает объект, включающий имя компьютера, создающего данные. Свойство 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
Чтобы скрыть свойство PSComputerName, можно использовать параметр Invoke-Command
HideComputerName для . Этот параметр предназначен для команд, которые собирают данные только с одного удаленного компьютера.
Следующая команда выполняет команду на удаленном Get-Culture
компьютере Server01. Он использует параметр 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
добавления свойства 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.
Однако десериализованный объект не является динамическим объектом. Это snapshot объекта во время сериализации. Десериализованный объект содержит свойства, но не содержит методов. Вы можете использовать эти объекты и управлять ими в PowerShell, включая передачу их в конвейеры, отображение выбранных свойств и их форматирование.
Большинство десериализованных объектов автоматически форматируются для отображения по записям в файлах Types.ps1xml
или Format.ps1xml
. Однако локальный компьютер может не содержать файлы форматирования для всех объектов, созданных на удаленном компьютере. Если объекты не отформатированы, все свойства каждого объекта отображаются в консоли в списке потоковой передачи.
Если объекты не форматируются автоматически, можно использовать командлеты форматирования, такие как Format-Table
или Format-List
, для форматирования и отображения выбранных свойств. Или можно использовать командлет для Out-GridView
отображения объектов в таблице.
При выполнении команды на удаленном компьютере, использующего командлеты, которых нет на локальном компьютере, объекты, возвращаемые командой, могут быть отформатированы неправильно, если на компьютере нет файлов форматирования для этих типов объектов. Командлеты Get-FormatData
и Export-FormatData
используются для получения данных форматирования с другого компьютера.
Некоторые типы объектов, такие как объекты DirectoryInfo и GUID, при получении преобразуются обратно в динамические объекты. Эти объекты не нуждаются в специальной обработке или форматировании.
Упорядочение результатов
Порядок имен компьютеров в параметре ComputerName командлетов определяет порядок подключения PowerShell к удаленным компьютерам. Однако результаты отображаются в порядке получения данных с удаленных компьютеров.
С помощью командлета Sort-Object
можно отсортировать результаты в psComputerName. При использовании любого другого свойства объекта результаты с разных компьютеров чередуются в выходных данных.