Поделиться через


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-CommandHideComputerName для . Этот параметр предназначен для команд, которые собирают данные только с одного удаленного компьютера.

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

См. также раздел