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