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


about_Remote_Output

Назначение: 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