Сведения об удаленных выходных данных
КРАТКОЕ ОПИСАНИЕ
Описывает, как интерпретировать и форматировать выходные данные удаленных команд.
ПОДРОБНОЕ ОПИСАНИЕ
Выходные данные команды, выполняемой на удаленном компьютере, могут выглядеть как выходные данные той же команды, выполняемой на локальном компьютере, но существуют некоторые существенные различия.
В этом разделе объясняется, как интерпретировать, форматировать и отображать выходные данные команд, выполняемых на удаленных компьютерах.
ОТОБРАЖЕНИЕ ИМЕНИ КОМПЬЮТЕРА
При использовании командлета 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. Можно также отсортировать другое свойство объекта, чтобы результаты с разных компьютеров были перемежаются.