Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0
РАЗДЕЛ
about_Remote_Output
КРАТКОЕ ОПИСАНИЕ
Описание интерпретации и форматирования выходных данных удаленных команд.
ПОДРОБНОЕ ОПИСАНИЕ
Выходные данные команды, которая была запущена на удаленном компьютере, могут быть похожи на выходные данные этой же команды, выполняемой на локальном компьютере, но с некоторыми отличиями.
В этом разделе содержатся сведения об интерпретации, форматировании и отображении выходных данных команд, выполняемых на удаленных компьютерах.
ОТОБРАЖЕНИЕ ИМЕНИ КОМПЬЮТЕРА
При использовании командлета 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.
C:\PS> $dates = invoke-command -script {get-date} -computername Server01, Server02
C:\PS> $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, который возвращает объекты на удаленном компьютере. Эти командлеты не используют удаленное взаимодействие Windows 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
Для отображения свойства MachineName объектов процесса можно использовать командлет Format-Table.
Например, следующая команда сохраняет процессы в переменной $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]($_.NPM/1024)}}, `
@{Label="PM(K)";Expression={[int]($_.PM/1024)}}, `
@{Label="WS(K)";Expression={[int]($_.WS/1024)}}, `
@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, `
@{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 (например, объекты, возвращаемые командлетами Windows PowerShell) не может передаваться по сети, динамические объекты сериализуются. Другими словами, динамические объекты преобразуются в XML-представления объекта и его свойств. Затем сериализованный объект на основе XML передается по сети.
На локальном компьютере Windows PowerShell получает сериализованный объект на основе XML и десериализует его путем преобразования объекта на основе XML в стандартный объект .NET Framework.
Однако десериализованный объект не является динамическим объектом. Он представляет собой моментальный снимок объекта в момент его сериализации и содержит свойства, но не методы. Эти объекты можно использовать в Windows PowerShell и управлять ими, включая их передачу по конвейерам, отображение выбранных свойств и их форматирование.
Большинство десериализованных объектов автоматически форматируется для отображения с помощью записей в файле Types.ps1xml или Format.ps1xml. Однако на локальном компьютере может не быть файлов форматирования для всех десериализованных объектов, которые были созданы на удаленном компьютере. Если объекты не отформатированы, все свойства каждого объекта будут отображаться в консоли в списке потоковой передачи.
Если объекты не отформатированы автоматически, можно использовать командлеты форматирования, такие как Format-Table или Format-List, для форматирования и отображения выбранных свойств. Или можно использовать командлет Out-GridView для отображения объектов в таблице.
Кроме того, при запуске команды на удаленном компьютере, который использует командлеты, отсутствующие на локальном компьютере, возвращаемые командой объекты могут иметь неправильный формат, поскольку на компьютере отсутствуют файлы форматирования для этих объектов. Чтобы получить данные форматирования с другого компьютера, используйте командлеты Get-FormatData и Export-FormatData.
Некоторые типы объектов, например объекты DirectoryInfo и идентификаторы GUID, при получении преобразуются в динамические объекты. Для этих объектов не требуется особая обработка или форматирование.
УПОРЯДОЧЕНИЕ РЕЗУЛЬТАТОВ
Порядок имен компьютеров в параметре ComputerName командлетов определяет порядок, в котором Windows PowerShell подключается к удаленным компьютерам. Однако результаты отображаются в том порядке, в котором их получает локальный компьютер. А этот порядок может отличаться.
Чтобы изменить порядок отображения результатов, используйте командлет Sort-Object. Можно выполнить сортировку по свойству PSComputerName или MachineName. Чтобы включить результаты с разных компьютеров, можно также отсортировать их по другому свойству объекта.
СМ. ТАКЖЕ
about_Remote
about_Remote_Variables
Format-Table
Get-EventLog
Get-Process
Get-Service
Get-WmiObject
Invoke-Command
Out-GridView
Select-Object