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. При использовании любого другого свойства объекта результаты из разных компьютеров перемежаются в выходных данных.

См. также