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