Сведения об удаленных выходных данных

КРАТКОЕ ОПИСАНИЕ

Описывает, как интерпретировать и форматировать выходные данные удаленных команд.

ПОДРОБНОЕ ОПИСАНИЕ

Выходные данные команды, выполняемой на удаленном компьютере, могут выглядеть как выходные данные той же команды, выполняемой на локальном компьютере, но существуют некоторые существенные различия.

В этом разделе объясняется, как интерпретировать, форматировать и отображать выходные данные команд, выполняемых на удаленных компьютерах.

ОТОБРАЖЕНИЕ ИМЕНИ КОМПЬЮТЕРА

При использовании командлета Invoke-Command для выполнения команды на удаленном компьютере команда возвращает объект, содержащий имя компьютера, создающего данные. Имя удаленного компьютера хранится в свойстве PSComputerName.

Во многих командах psComputerName отображается по умолчанию. Например, следующая команда выполняет команду Get-Culture на двух удаленных компьютерах, Server01 и Server02. Выходные данные, отображаемые ниже, включают имена удаленных компьютеров, на которых выполняется команда.

C:\PS> invoke-command -script {get-culture} -comp Server01, Server02

LCID  Name    DisplayName                PSComputerName
----  ----    -----------                --------------
1033  en-US   English (United States)    Server01
1033  es-AR   Spanish (Argentina)        Server02

Чтобы скрыть свойство PSComputerName, можно использовать параметр HideComputerName Invoke-Command. Этот параметр предназначен для команд, которые собирают данные только с одного удаленного компьютера.

Следующая команда выполняет команду Get-Culture на удаленном компьютере Server01. Он использует параметр HideComputerName для скрытия свойства PSComputerName и связанных свойств.

C:\PS> invoke-command -scr {get-culture} -comp Server01 -HideComputerName

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

Свойство PSComputerName также можно отобразить, если оно не отображается по умолчанию.

Например, следующие команды используют командлет Format-Table для добавления свойства PSComputerName в выходные данные удаленной команды Get-Date.

$dates = invoke-command -script {get-date} -computername Server01, Server02
$dates | format-table DateTime, PSComputerName -auto

DateTime                            PSComputerName
--------                            --------------
Monday, July 21, 2008 7:16:58 PM    Server01
Monday, July 21, 2008 7:16:58 PM    Server02

ОТОБРАЖЕНИЕ СВОЙСТВА MACHINENAME

Несколько командлетов, включая Get-Process, Get-Service и Get-EventLog, имеют параметр ComputerName, который получает объекты на удаленном компьютере. Эти командлеты не используют удаленное взаимодействие PowerShell, поэтому их можно использовать даже на компьютерах, которые не настроены для удаленного взаимодействия в Windows PowerShell.

Объекты, возвращаемые этими командлетами, сохраняют имя удаленного компьютера в свойстве MachineName. (Эти объекты не имеют свойства PSComputerName.)

Например, эта команда получает процесс PowerShell на удаленных компьютерах Server01 и Server02. Отображение по умолчанию не включает свойство MachineName.

C:\PS> get-process PowerShell -computername server01, server02

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
920      38    97524     114504   575     9.66   2648 PowerShell
194       6    24256      32384   142            3020 PowerShell
352      27    63472      63520   577     3.84   4796 PowerShell

С помощью командлета Format-Table можно отобразить свойство MachineName объектов процесса.

Например, следующая команда сохраняет процессы в переменной $p, а затем использует оператор конвейера (|) для отправки процессов в $p команде Format-Table. Команда использует параметр Property Format-Table для включения свойства MachineName в дисплей.

C:\PS> $p = get-process PowerShell -comp Server01, Server02
C:\PS> $P | format-table -property ID, ProcessName, MachineName -auto

Id ProcessName MachineName
-- ----------- -----------
2648 PowerShell  Server02
3020 PowerShell  Server01
4796 PowerShell  Server02

Следующая более сложная команда добавляет свойство MachineName к отображению процесса по умолчанию. Он использует хэш-таблицы для указания вычисляемых свойств. К счастью, вам не нужно понимать его, чтобы использовать его.

(Обратите внимание, что обратная черта ['] является символом продолжения.)

C:\PS> $p = get-process PowerShell -comp Server01, Server02

C:\PS> $p | format-table -property Handles, `
@{Label="NPM(K)";Expression={int}}, `
@{Label="PM(K)";Expression={int}}, `
@{Label="WS(K)";Expression={int}}, `
@{Label="VM(M)";Expression={int}}, `
@{Label="CPU(s)";Expression={if ($.CPU -ne $()){ $.CPU.ToString("N")}}}, `
Id, ProcessName, MachineName -auto

Handles NPM(K) PM(K)  WS(K) VM(M) CPU(s)   Id ProcessName MachineName
------- ------ -----  ----- ----- ------   -- ----------- -----------
920     38 97560 114532   576        2648 PowerShell  Server02
192      6 24132  32028   140        3020 PowerShell  Server01
438     26 48436  59132   565        4796 PowerShell  Server02

ДЕСЕРИАЛИЗОВАННЫЕ ОБЪЕКТЫ

При выполнении удаленных команд, которые создают выходные данные, выходные данные команды передаются через сеть обратно на локальный компьютер.

Так как большинство динамических объектов Microsoft платформа .NET Framework (например, объекты, возвращаемые командлетами PowerShell) не могут передаваться по сети, динамические объекты сериализуются. Другими словами, динамические объекты преобразуются в XML-представления объекта и его свойств. Затем сериализованный объект на основе XML передается по сети.

На локальном компьютере PowerShell получает сериализованный xml-объект и десериализирует его путем преобразования объекта на основе XML в стандартный объект платформа .NET Framework.

Однако десериализованный объект не является динамическим объектом. Это моментальный снимок объекта во время сериализации, и он включает свойства, но не методы. Эти объекты можно использовать и управлять ими в PowerShell, включая передачу их в конвейеры, отображение выбранных свойств и их форматирование.

Большинство десериализованных объектов автоматически форматируются для отображения записями в файлах Types.ps1xml или Format.ps1xml. Однако на локальном компьютере могут не быть файлов форматирования для всех десериализованных объектов, созданных на удаленном компьютере. Если объекты не отформатированы, все свойства каждого объекта отображаются в консоли в списке потоковой передачи.

Если объекты не отформатированы автоматически, можно использовать командлеты форматирования, такие как Format-Table или format-List, для форматирования и отображения выбранных свойств. Кроме того, можно использовать командлет Out-GridView для отображения объектов в таблице.

Кроме того, при выполнении команды на удаленном компьютере, использующего командлеты, отсутствующие на локальном компьютере, объекты, возвращаемые командой, могут быть отформатированы неправильно, так как у вас нет файлов форматирования для этих объектов на компьютере. Чтобы получить данные форматирования с другого компьютера, используйте командлеты Get-FormatData и Export-FormatData.

Некоторые типы объектов, такие как объекты DirectoryInfo и GUID, преобразуются обратно в динамические объекты при их получении. Эти объекты не нуждаются в специальной обработке или форматировании.

УПОРЯДОЧЕНИЕ РЕЗУЛЬТАТОВ

Порядок имен компьютеров в параметре ComputerName командлетов определяет порядок подключения PowerShell к удаленным компьютерам. Однако результаты отображаются в том порядке, в котором локальный компьютер получает их, что может быть другим порядком.

Чтобы изменить порядок результатов, используйте командлет Sort-Object. Можно выполнить сортировку по свойству PSComputerName или MachineName. Можно также отсортировать другое свойство объекта, чтобы результаты с разных компьютеров были перемежаются.

СМ. ТАКЖЕ

about_Remote

about_Remote_Variables

Format-Table

Get-Process

Get-Service

Invoke-Command

Select-Object