РАЗДЕЛ 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 Параметр HideComputerName командлета Invoke-Command можно использовать для скрытия свойства PSComputerName. Этот параметр предназначен для команд, собирающих данные только с одного удаленного компьютера. Следующая команда выполняет команду 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 -------- -------------- Понедельник, 21 июля 2008 г., 19:16:58 Server01 Понедельник, 21 июля 2008 г., 19:16:58 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 и использует оператор конвейера (|) для передачи сохраненных в ней процессов командлету 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 и "десериализует" его путем преобразования в стандартный объект .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 Format-Table Get-EventLog Get-Process Get-Service Get-WmiObject Invoke-Command Out-GridView Select-Object