about_Remote_Output

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

about_Remote_Output

간단한 설명

원격 명령 출력을 해석하고 형식을 지정하는 방법을 설명합니다.

자세한 설명

원격 컴퓨터에서 실행된 명령의 출력은 로컬 컴퓨터에서 실행된 동일한 명령의 출력과 같을 수 있지만 중요한 몇 가지 차이가 있습니다.

이 항목에서는 원격 컴퓨터에서 실행되는 명령의 출력을 해석하고 형식을 지정하고 표시하는 방법을 설명합니다.

컴퓨터 이름 표시

Invoke-Command cmdlet을 사용하여 원격 컴퓨터에서 명령을 실행하면 명령은 데이터를 생성한 컴퓨터의 이름을 포함하는 개체를 반환합니다. 원격 컴퓨터 이름은 PSComputerName 속성에 저장됩니다.

많은 명령의 경우 기본적으로 PSComputerName이 표시됩니다. 예를 들어 다음 명령은 두 대의 원격 컴퓨터 Server01 및 Server02에 대해 Get-Culture 명령을 실행합니다. 아래에 나타나는 출력에는 명령이 실행된 원격 컴퓨터의 이름이 포함됩니다.

        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

Invoke-Command의 HideComputerName 매개 변수를 사용하여 PSComputerName 속성을 숨길 수 있습니다. 이 매개 변수는 한 대의 원격 컴퓨터에서 데이터를 수집하는 명령을 위해 작성되었습니다.

다음 명령은 Server01 원격 컴퓨터에 대해 Get-Culture 명령을 실행합니다. PSComputerName 속성 및 관련 속성을 숨기려면 HideComputerName 매개 변수를 사용합니다.

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

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

PSComputerName 속성이 기본적으로 표시되지 않은 경우에도 표시할 수 있습니다.

예를 들어 다음 명령은 Format-Table cmdlet을 사용하여 원격 Get-Date 명령의 출력에 PSComputerName 속성을 추가합니다.

        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를 포함하는 여러 cmdlet에는 원격 컴퓨터의 개체를 가져오는 ComputerName 매개 변수가 사용됩니다. 이러한 cmdlet은 Windows PowerShell® 원격 기능을 사용하지 않으므로 Windows PowerShell의 원격 기능을 사용하도록 구성되지 않은 컴퓨터에서도 이러한 cmdlet을 사용할 수 있습니다.

이러한 cmdlet이 반환하는 개체는 원격 컴퓨터의 이름을 MachineName 속성에 저장합니다. (이러한 개체는 PSComputerName 속성을 갖지 않습니다.)

예를 들어 이 명령은 Server01 및 Server02 원격 컴퓨터의 PowerShell 프로세스를 가져옵니다. 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 cmdlet을 사용하여 프로세스 개체의 MachineName 속성을 표시할 수 있습니다.

예를 들어 다음 명령은 $p 변수에 프로세스를 저장한 다음 파이프라인 연산자(|)를 사용하여 $p의 프로세스를 Format-Table 명령으로 보냅니다. 이 명령은 Format-Table의 Property 매개 변수를 사용하여 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 cmdlet에서 반환하는 개체)는 네트워크를 통해 전송될 수 없으므로 라이브 개체는 "직렬화"됩니다. 즉, 라이브 개체는 개체 및 해당 속성의 XML 표현으로 변환됩니다. 그런 다음 XML 기반의 직렬화된 개체가 네트워크를 통해 전송됩니다.

로컬 컴퓨터에서 Windows PowerShell은 XML 기반의 직렬화된 개체를 수신하고 XML 기반 개체를 표준 .NET Framework 개체로 변환하여 "역직렬화"합니다.

그러나 역직렬화된 개체는 라이브 개체가 아닙니다. 이 개체는 직렬화되었을 당시의 개체의 스냅숏이며 속성은 포함하지만 메서드는 포함하지 않습니다. Windows PowerShell에서는 이러한 개체를 파이프라인에 전달하고, 선택한 속성을 표시하고, 형식을 지정하는 것과 같이 개체를 사용하고 관리할 수 있습니다.

대부분의 역직렬화된 개체는 Types.ps1xml 또는 Format.ps1xml 파일에 항목으로 표시되도록 자동으로 형식이 지정됩니다. 그러나 로컬 컴퓨터에 원격 컴퓨터에서 생성된 역직렬화된 모든 개체에 대한 형식 지정 파일이 있는 것은 아닙니다. 개체의 형식이 지정되지 않으면 각 개체의 모든 속성이 콘솔에 스트리밍 목록으로 표시됩니다.

개체 형식이 자동으로 지정되지 않으면 Format-Table 또는 Format-List와 같은 형식 지정 cmdlet을 사용하여 선택한 속성의 형식을 지정하고 표시할 수 있습니다. 또는 Out-GridView cmdlet을 사용하여 테이블에 개체를 표시할 수 있습니다.

또한 로컬 컴퓨터에 없는 cmdlet을 사용하는 원격 컴퓨터에서 명령을 실행하는 경우 컴퓨터에 해당 개체에 대한 형식 지정 파일이 없기 때문에 명령이 반환하는 개체의 형식을 제대로 지정하지 못할 수 있습니다. 다른 컴퓨터에서 형식 지정 데이터를 가져오려면 Get-FormatData 및 Export-FormatData cmdlet을 사용합니다.

DirectoryInfo 개체, GUID 등의 일부 개체 형식은 수신될 때 라이브 개체로 다시 변환됩니다. 이러한 개체에는 특수한 처리나 형식 지정이 필요하지 않습니다.

결과 순서 지정

Cmdlet의 ComputerName 매개 변수에 사용된 컴퓨터 이름의 순서에 따라 Windows PowerShell이 원격 컴퓨터에 연결하는 순서가 결정됩니다. 그러나 결과는 로컬 컴퓨터가 결과를 받은 순서대로 표시되므로 다를 수 있습니다.

결과의 순서를 변경하려면 Sort-Object cmdlet을 사용합니다. PSComputerName 또는 MachineName 속성을 기준으로 정렬할 수 있습니다. 다른 컴퓨터의 결과가 혼합되도록 개체의 다른 속성을 기준으로 정렬할 수도 있습니다.

참고 항목

about_Remote

about_Remote_Variables

표 서식

Get-EventLog

Get-Process

Get-Service

Get-WmiObject

Invoke-Command

Out-GridView

Select-Object