로컬 및 원격 컴퓨터에서 명령을 실행합니다.

구문

Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-ApplicationName <string>] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-AllowRedirection] [-AsJob] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-CertificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]

설명

Invoke-Command cmdlet은 로컬 컴퓨터나 원격 컴퓨터에서 명령을 실행하고 오류를 비롯한 명령의 모든 출력을 반환합니다. 단일 Invoke-Command 명령을 사용하여 여러 컴퓨터에서 명령을 실행할 수 있습니다.

원격 컴퓨터에서 단일 명령을 실행하려면 ComputerName 매개 변수를 사용합니다. 데이터를 공유하는 일련의 관련 명령을 실행하려면 원격 컴퓨터에서 PSSession(영구 연결)을 만든 다음 Invoke-Command의 Session 매개 변수를 사용하여 PSSession에서 명령을 실행합니다.

또한 로컬 컴퓨터에서 Invoke-Command를 사용하여 스크립트 블록에서 문자열을 평가하거나 명령으로 실행할 수 있습니다. Windows PowerShell은 스크립트 블록을 명령으로 변환하고 명령줄에서 문자열을 에코하는 대신 현재 범위에서 명령을 즉시 실행합니다.

Invoke-Command를 사용하여 원격 컴퓨터에서 명령을 실행하기 전에 about_Remote를 읽어보십시오.

매개 변수

-AllowRedirection

이 연결을 대체 URI로 리디렉션할 수 있도록 허용합니다.

ConnectionURI 매개 변수를 사용하는 경우 원격 대상은 다른 URI로 리디렉션하라는 지침을 반환할 수 있습니다. 기본적으로 Windows PowerShell은 연결을 리디렉션하지 않지만 AllowRedirection 매개 변수를 사용하여 Windows PowerShell이 연결을 리디렉션하도록 허용할 수 있습니다.

$PSSessionOption 기본 설정 변수의 MaximumConnectionRedirectionCount 속성 또는 SessionOption 매개 변수 값의 MaximumConnectionRedirectionCount 속성을 설정하여 연결이 리디렉션되는 횟수를 제한할 수도 있습니다. 기본값은 5입니다. 자세한 내용은 SessionOption 매개 변수 설명과 New-PSSessionOption cmdlet에 대한 도움말 항목을 참조하십시오.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-ApplicationName <string>

연결 URI의 응용 프로그램 이름 세그먼트를 지정합니다. 이 매개 변수를 사용하여 명령에 ConnectionURI 매개 변수를 사용하지 않는 경우 응용 프로그램 이름을 지정할 수 있습니다.

기본값은 로컬 컴퓨터의 $PSSessionApplicationName 기본 설정 변수의 값입니다. 이 기본 설정 변수를 정의하지 않으면 WSMAN이 기본값으로 사용됩니다. 대부분의 경우 이 값을 사용하면 됩니다. 자세한 내용은 about_Preference_Variables를 참조하십시오.

WinRM 서비스는 응용 프로그램 이름을 사용하여 연결 요청을 서비스하는 수신기를 선택합니다. 이 매개 변수 값은 원격 컴퓨터에 있는 수신기의 URLPrefix 속성 값과 일치해야 합니다.

필수 여부

false

위치

named

기본값

WSMAN

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-ArgumentList <Object[]>

명령에 있는 로컬 변수의 값을 제공합니다. 명령에 있는 변수는 원격 컴퓨터에서 명령이 실행되기 전에 이 값으로 교체됩니다. 쉼표로 구분된 목록으로 값을 입력합니다. 값은 나열된 순서대로 변수에 연결됩니다. ArgumentList의 별칭은 "Args"입니다.

ArgumentList의 값은 "1024"와 같은 실제 값이거나 "$max"와 같은 로컬 변수에 대한 참조일 수 있습니다.

명령에서 로컬 변수를 사용하려면 다음 명령 형식을 사용합니다.

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value | $local-variable>

param 키워드를 사용하면 명령에 사용되는 로컬 변수가 나열됩니다. ArgumentList 매개 변수는 나열된 순서대로 변수 값을 제공합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-AsJob

명령을 원격 컴퓨터에서 백그라운드 작업으로 실행합니다. 이 매개 변수를 사용하여 완료되는 데 시간이 많이 걸리는 명령을 실행할 수 있습니다.

AsJob을 사용하는 경우 이 명령은 작업을 나타내는 개체를 반환한 다음 명령 프롬프트를 표시합니다. 작업이 완료되는 동안 세션에서 작업을 계속할 수 있습니다. 작업을 관리하려면 Job cmdlet을 사용합니다. 작업 결과를 가져오려면 Receive-Job을 사용합니다.

AsJob 매개 변수는 Invoke-Command를 사용하여 원격으로 Start-Job 명령을 실행하는 것과 유사합니다. 하지만 AsJob을 사용하는 경우 작업이 원격 컴퓨터에서 실행되는 경우에도 로컬 컴퓨터에 작업이 만들어지고 원격 작업의 결과가 자동으로 로컬 컴퓨터로 반환됩니다.

Windows PowerShell 백그라운드 작업에 대한 자세한 내용은 about_Jobs 및 about_Remote_Jobs를 참조하십시오.

필수 여부

false

위치

named

기본값

없음

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Authentication <AuthenticationMechanism>

사용자 자격 증명을 인증하는 데 사용되는 메커니즘을 지정합니다. 유효한 값은 Default, Basic, Credssp, Digest, Kerberos, Negotiate 및 NegotiateWithImplicitCredential입니다. 기본값은 Default입니다.

CredSSP 인증은 Windows Vista 및 Windows Server 2008 이상에서만 사용할 수 있습니다.

이 매개 변수의 값에 대한 자세한 내용은 MSDN의 System.Management.Automation.Runspaces.AuthenticationMechanism 열거형에 대한 설명을 참조하십시오.

주의: 사용자의 자격 증명이 인증을 위해 원격 컴퓨터로 전달되는 CredSSP(자격 증명 보안 서비스 공급자) 인증은 원격 네트워크 공유에 액세스하는 것처럼 둘 이상의 리소스에서 인증이 필요한 명령을 위한 것입니다. 이렇게 하면 원격 작업의 보안 위험이 높아집니다. 원격 컴퓨터가 손상된 경우 이 컴퓨터로 전달된 자격 증명을 사용하여 네트워크 세션을 제어할 수 있습니다.

필수 여부

false

위치

named

기본값

Default

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-CertificateThumbprint <string>

이 작업을 수행할 권한이 있는 사용자 계정의 디지털 공개 키 인증서(X509)를 지정합니다. 인증서의 인증서 손 도장(Thumbprint)을 입력합니다.

인증서는 클라이언트 인증서 기반 인증에 사용됩니다. 인증서 손 도장(Thumbprint)은 로컬 사용자 계정으로만 매핑될 수 있고 도메인 계정에는 사용할 수 없습니다.

인증서 손 도장(Thumbprint)을 가져오려면 Windows PowerShell Cert: 드라이브에서 Get-Item 또는 Get-ChildItem 명령을 사용합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-ComputerName <string[]>

명령이 실행되는 컴퓨터를 지정합니다. 기본값은 로컬 컴퓨터입니다.

ComputerName 매개 변수를 사용하는 경우 Windows PowerShell은 지정된 명령을 실행하는 데만 사용되고 실행 후 닫히는 임시 연결을 만듭니다. 영구 연결이 필요하면 Session 매개 변수를 사용합니다.

하나 이상의 컴퓨터의 NETBIOS 이름, IP 주소 또는 정규화된 도메인 이름을 쉼표로 구분된 목록으로 입력합니다. 로컬 컴퓨터를 지정하려면 컴퓨터 이름, "localhost" 또는 점(.)을 입력합니다.

ComputerName 매개 변수의 값에 IP 주소를 사용하려면 명령에 Credential 매개 변수를 포함해야 합니다. 또한 HTTPS 전송을 사용하도록 컴퓨터를 구성하거나 원격 컴퓨터의 IP 주소를 로컬 컴퓨터의 WinRM TrustedHosts 목록에 포함해야 합니다. 컴퓨터 이름을 TrustedHosts 목록에 추가하는 방법에 대한 지침은 about_Remote_Troubleshooting의 "How to Add a Computer to the Trusted Host List(신뢰할 수 있는 호스트 목록에 컴퓨터를 추가하는 방법)"를 참조하십시오.

참고: Windows Vista 이상 버전에서 ComputerName 매개 변수 값에 로컬 컴퓨터를 포함하려면 "관리자 권한으로 실행" 옵션을 사용하여 Windows PowerShell을 열어야 합니다.

필수 여부

false

위치

1

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-ConfigurationName <string>

새 PSSession에 사용할 세션 구성을 지정합니다.

구성 이름 또는 세션 구성에 대한 정규화된 리소스 URI를 입력합니다. 구성 이름만 지정하는 경우 스키마 URI https://schemas.microsoft.com/powershell이 앞에 추가됩니다.

세션의 세션 구성은 원격 컴퓨터에 있습니다. 지정된 세션 구성이 원격 컴퓨터에 없으면 명령이 실패합니다.

기본값은 로컬 컴퓨터의 $PSSessionConfigurationName 기본 설정 변수의 값입니다. 이 기본 설정 변수를 설정하지 않으면 Microsoft.PowerShell이 기본값으로 사용됩니다. 자세한 내용은 about_preference_variables를 참조하십시오.

필수 여부

false

위치

named

기본값

https://schemas.Microsoft.com/PowerShell/Microsoft.PowerShell

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-ConnectionURI <Uri[]>

연결 끝점을 정의하는 URI(Uniform Resource Identifier)를 지정합니다. URI는 정규화된 URI여야 합니다.

이 문자열의 형식은 다음과 같습니다.

<Transport>://<ComputerName>:<Port>/<ApplicationName>

기본값은 다음과 같습니다.

http://localhost:80/WSMAN

URI의 전송 세그먼트에 유효한 값은 HTTP 및 HTTPS입니다. ConnectionURI를 지정하지 않으면 UseSSL, ComputerName, Port 및 ApplicationName 매개 변수를 사용하여 URI 값을 지정할 수 있습니다.

대상 컴퓨터가 연결을 다른 URI로 리디렉션하는 경우 Windows PowerShell은 명령에 AllowRedirection 매개 변수가 사용되지 않은 한 리디렉션을 허용하지 않습니다.

필수 여부

false

위치

1

기본값

http://localhost:80/wsman

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-Credential <PSCredential>

이 작업을 수행할 수 있는 권한을 가진 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.

"User01" 또는 "Domain01\User01"과 같은 사용자 이름을 입력하거나 Get-Credential cmdlet에서 생성된 것과 같은 PSCredential 개체가 포함된 변수를 입력합니다. 사용자 이름을 입력하면 암호를 묻는 메시지가 표시됩니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-FilePath <string>

하나 이상의 원격 컴퓨터에서 지정된 로컬 스크립트를 실행합니다. 스크립트의 경로와 파일 이름을 입력하거나 스크립트 경로를 Invoke-Command로 파이프하십시오. 스크립트는 로컬 컴퓨터나 로컬 컴퓨터에서 액세스할 수 있는 디렉터리에 있어야 합니다. 스크립트에서 매개 변수의 값을 지정하려면 ArgumentList 매개 변수를 사용합니다.

이 매개 변수를 사용하는 경우 Windows PowerShell은 지정된 스크립트 파일의 내용을 스크립트 블록으로 변환하고 스크립트 블록을 원격 컴퓨터로 전송한 다음 원격 컴퓨터에서 실행합니다.

필수 여부

true

위치

2

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-HideComputerName

출력 표시에서 각 개체의 컴퓨터 이름을 생략합니다. 기본적으로 개체를 생성한 컴퓨터의 이름은 화면에 표시됩니다.

이 매개 변수는 출력 표시에만 영향을 줍니다. 개체는 변경하지 않습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-InputObject <psobject>

명령에 대한 입력을 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령 또는 식을 입력하십시오.

InputObject를 사용하는 경우 ScriptBlock 매개 변수의 값에서 $input 자동 변수를 사용하여 입력 개체를 나타낼 수 있습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

true (ByValue)

와일드카드 문자 적용 여부

false

-JobName <string>

백그라운드 작업의 이름을 지정합니다. 기본적으로 작업의 이름은 "Job<n>"으로 지정되는데 이때 <n>은 서수를 나타냅니다. 이 매개 변수는 AsJob 매개 변수가 있어야만 유효합니다.

명령에서 JobName 매개 변수를 사용하는 경우 명령에 AsJob 매개 변수가 포함되어 있지 않더라도 이 명령은 작업으로 실행되고 Invoke-Command에서 작업 개체를 반환합니다.

Windows PowerShell 백그라운드 작업에 대한 자세한 내용은 about_Jobs를 참조하십시오.

필수 여부

false

위치

named

기본값

Job<n>

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Port <int>

이 명령에 사용할 원격 컴퓨터의 네트워크 포트를 지정합니다. 기본값은 포트 80(HTTP 포트)입니다.

대체 포트를 사용하려면 먼저 원격 컴퓨터에 해당 포트에서 수신할 WinRM 수신기를 구성해야 합니다. 수신기를 구성하려면 Windows PowerShell 프롬프트에 다음 두 명령을 입력합니다.

remove-item -path wsman:\Localhost\listener\listener* -recurse

new-item -path wsman:\Localhost\listener -Transport http -Address * -port <port-number>

꼭 필요한 경우가 아니면 Port 매개 변수를 사용하지 마십시오. 이 명령에 설정된 Port는 이 명령이 실행되는 모든 컴퓨터나 세션에 적용됩니다. 대체 포트 설정을 사용하면 일부 컴퓨터에서 명령이 실행되지 않을 수 있습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-ScriptBlock <scriptblock>

실행할 명령을 지정합니다. 명령을 중괄호( { } )로 묶어 스크립트 블록을 만듭니다. 이 매개 변수는 필수 사항입니다.

기본적으로 명령에 있는 모든 변수는 원격 컴퓨터에서 평가됩니다. 명령에 로컬 변수를 포함하려면 ArgumentList 매개 변수를 사용합니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Session <PSSession[]>

지정된 Windows PowerShell 세션(PSSession)에서 명령을 실행합니다. PSSession이 포함된 변수를 입력하거나 PSSession을 만들거나 가져오는 명령(예: New-PSSession 또는 Get-PSSession 명령)을 입력합니다.

PSSession을 만드는 경우 Windows PowerShell은 원격 컴퓨터에 영구 연결을 설정합니다. 데이터를 공유하는 일련의 관련 명령을 실행하려면 PSSession을 사용합니다. 단일 명령이나 일련의 관련되지 않은 명령을 실행하려면 ComputerName 매개 변수를 사용합니다.

PSSession을 만들려면 New-PSSession cmdlet을 사용합니다. 자세한 내용은 about_PSSessions를 참조하십시오.

필수 여부

false

위치

1

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-SessionOption <PSSessionOption>

세션의 고급 옵션을 설정합니다. New-PSSessionOption cmdlet을 사용하여 만든 SessionOption 개체를 입력합니다.

옵션의 기본값은 $PSSessionOption 기본 설정 변수의 값(설정되어 있는 경우)에 의해 결정됩니다. 그렇지 않으면 세션에서 시스템 기본값이 사용됩니다.

세션 옵션 및 기본값에 대한 자세한 내용은 New-PSSessionOption cmdlet에 대한 도움말 항목을 참조하십시오. $PSSessionOption 기본 설정 변수에 대한 자세한 내용은 about_Preference_Variables를 참조하십시오.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-ThrottleLimit <int>

이 명령을 실행하기 위해 설정할 수 있는 최대 동시 연결 수를 지정합니다. 이 매개 변수를 생략하거나 0을 입력하면 기본값인 32가 사용됩니다.

스로틀 한도는 현재 명령에만 적용되며 세션이나 컴퓨터에는 적용되지 않습니다.

필수 여부

false

위치

named

기본값

32

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-UseSSL

SSL(Secure Sockets Layer) 프로토콜을 사용하여 원격 컴퓨터에 연결합니다. 기본적으로 SSL은 사용되지 않습니다.

WS-Management는 네트워크로 전송되는 모든 Windows PowerShell 콘텐츠를 암호화합니다. UseSSL은 HTTP 대신 HTTPS를 통해 데이터를 보내는 추가적인 보호 기능입니다.

이 매개 변수를 사용하지만 명령에 사용되는 포트에서 SSL을 사용할 수 없는 경우 이 명령은 실패합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

System.Management.Automation.ScriptBlock

스크립트 블록의 명령을 Invoke-Command로 파이프할 수 있습니다. $input 자동 변수를 사용하여 명령에서 입력 개체를 나타낼 수 있습니다.

출력

System.Management.Automation.PSRemotingJob 또는 호출된 명령의 출력

AsJob 매개 변수를 사용하는 경우 Invoke-Command는 작업 개체를 반환합니다. 그렇지 않으면 호출된 명령의 출력(ScriptBlock 매개 변수의 값)을 반환합니다.

참고

-- Windows Vista 이상 버전에서 Invoke-Command의 ComputerName 매개 변수를 사용하여 로컬 컴퓨터에서 명령을 실행하려면 "관리자 권한으로 실행" 옵션을 사용하여 Windows PowerShell을 열어야 합니다.

-- 여러 컴퓨터에서 명령을 실행하는 경우 Windows PowerShell은 목록에 나타나는 순서대로 컴퓨터에 연결합니다. 그러나 명령 출력은 원격 컴퓨터에서 받는 순서대로 표시되므로 연결 순서와 다를 수도 있습니다.

-- Invoke-Command가 실행되는 명령에서 발생하는 오류는 명령 결과에 포함됩니다. 로컬 명령에서 종료 오류인 오류는 원격 명령에서 종료되지 않는 오류로 취급됩니다. 이 전략에 따라 한 컴퓨터의 종료 오류가 해당 명령이 실행되는 모든 컴퓨터에서 해당 명령을 종료하지 않습니다. 이 방법은 원격 명령이 한 컴퓨터에서 실행되는 경우에도 사용됩니다.

-- 로컬 컴퓨터가 신뢰하는 도메인에 있지 않은 원격 컴퓨터는 이러한 사용자 자격 증명을 인증하지 못할 수도 있습니다. 원격 컴퓨터를 WS-Management에서 "신뢰할 수 있는 호스트"의 목록에 추가하려면 WSMAN 공급자에서 다음 명령을 사용합니다. 여기서 <Remote-Computer-Name>은 원격 컴퓨터의 이름입니다.

set-item -path wsman:\Localhost\Client\TrustedHosts -value <Remote-Computer-Name>

예 1

C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01

Disks: C:, D:, E:
Status: Warning, Normal, Normal

설명
-----------
이 명령은 Server01 컴퓨터에서 Test.ps1 스크립트를 실행합니다. 

이 명령은 FilePath 매개 변수를 사용하여 로컬 컴퓨터에 있는 스크립트를 지정합니다. 원격 컴퓨터에서 스크립트가 실행되고 그 결과가 로컬 컴퓨터로 반환됩니다.






예 2

C:\PS>invoke-command -computername server01 -credential domain01\user01 -scriptblock {get-culture}

설명
-----------
이 명령은 Server01 원격 컴퓨터에서 Get-Culture 명령을 실행합니다. 

이 명령은 ComputerName 매개 변수를 사용하여 컴퓨터 이름을 지정하고 Credential 매개 변수를 사용하여 명령을 실행할 권한을 가진 사용자인 "Domain01\User01"의 보안 컨텍스트에서 명령을 실행합니다. 이 명령은 ScriptBlock 매개 변수를 사용하여 원격 컴퓨터에서 실행할 명령을 지정합니다.

이에 대한 응답으로 Windows PowerShell은 User01 계정에 대한 암호와 인증 방법을 요청하는 대화 상자를 표시한 다음 Server01 컴퓨터에서 이 명령을 실행하고 결과를 반환합니다.






예 3

C:\PS>$s = new-pssession -computername server02 -credential domain01\user01

C:\PS> invoke-command -session $s -scriptblock {get-culture}

설명
-----------
이 예에서는 Server02 원격 컴퓨터의 세션(영구 연결)에서 동일한 "Get-Culture" 명령을 실행합니다. 일반적으로 원격 컴퓨터에서 일련의 명령을 실행하는 경우에만 세션을 만듭니다.

첫 번째 명령은 New-PSSession cmdlet을 사용하여 Server02 원격 컴퓨터에서 세션을 만든 다음 $s 변수에 저장합니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 Server02에서 Get-Culture 명령을 실행합니다. 이 명령은 Session 매개 변수를 사용하여 $s 변수에 저장된 세션을 지정합니다. 

이에 대한 응답으로 Windows PowerShell은 Server02 컴퓨터의 세션에서 명령을 실행합니다.






예 4

C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process powershell}

C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorysize}
C:\PS>

C:\PS> $s = new-pssession -computername Server02
C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
17930240

설명
-----------
이 예에서는 Invoke-Command의 ComputerName 및 Session 매개 변수를 사용하는 효과를 비교하며, 세션을 사용하여 동일한 데이터를 공유하는 일련의 명령을 실행하는 방법을 보여 줍니다.

처음 두 명령은 Invoke-Command의 ComputerName 매개 변수를 사용하여 Server02 원격 컴퓨터에서 명령을 실행합니다. 첫 번째 명령은 Get-Process 명령을 사용하여 원격 컴퓨터의 PowerShell 프로세스를 가져온 다음 $p 변수에 저장합니다. 두 번째 명령은 PowerShell 프로세스의 VirtualMemorySize 속성 값을 가져옵니다. 

첫 번째 명령은 성공하지만 ComputerName 매개 변수를 사용할 경우 Windows PowerShell은 단지 명령을 실행하기 위해 연결을 만들기 때문에 두 번째 명령이 실패합니다. 명령이 완료될 때 연결을 닫습니다. $p 변수는 한 연결에서 만들어졌지만 두 번째 명령을 위해 만들어진 연결에는 없습니다.

이 문제는 원격 컴퓨터에서 세션(영구 연결)을 만들고 두 개의 관련 명령을 모두 동일한 세션에서 실행하면 해결됩니다.

세 번째 명령은 New-PSSession cmdlet을 사용하여 Server02 컴퓨터에서 세션을 만든 다음 $s 변수에 저장합니다. 네 번째 및 다섯 번째 명령은 첫 번째 집합에서 사용된 일련의 명령을 반복하지만 이 경우에는 Invoke-Command 명령이 Session 매개 변수를 사용하여 두 명령을 모두 동일한 세션에서 실행합니다. 

이 경우 두 명령이 모두 동일한 세션에서 실행되기 때문에 두 명령이 성공하고 $p 값이 나중에 사용할 수 있도록 $s 세션에서 활성 상태로 유지됩니다.






예 5

C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.message -like "*certificate*"} }

C:\PS> invoke-command -computername S1, S2 -scriptblock $command

설명
-----------
이 예에서는 로컬 변수에 저장되는 명령을 입력하는 방법을 보여 줍니다. 

전체 명령이 로컬 변수에 저장되는 경우 변수를 ScriptBlock 매개 변수의 값으로 지정할 수 있습니다. "param" 키워드나 ArgumentList 변수를 사용하여 로컬 변수의 값을 전송할 필요가 없습니다.

첫 번째 명령은 Get-Eventlog 명령을 $command 변수에 저장합니다. 이 명령은 스크립트 블록으로 형식이 지정됩니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 S1 및 S2 원격 컴퓨터에서 $command의 명령을 실행합니다.






예 6

C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -configurationname MySession.PowerShell -scriptblock {get-eventlog "windows powershell"}

설명
-----------
이 예에서는 Invoke-Command cmdlet을 사용하여 여러 컴퓨터에서 한 명령을 실행하는 방법을 보여 줍니다. 

이 명령은 ComputerName 매개 변수를 사용하여 컴퓨터를 지정합니다. 컴퓨터 이름은 쉼표로 구분된 목록으로 표시됩니다. 컴퓨터 목록에는 로컬 컴퓨터를 나타내는 "localhost" 값이 포함됩니다.

이 명령은 ConfigurationName 매개 변수를 사용하여 Windows PowerShell의 다른 세션 구성을 지정하고 ScriptBlock 매개 변수를 사용하여 명령을 지정합니다.

이 예에서 스크립트 블록의 명령은 각 원격 컴퓨터의 Windows PowerShell 이벤트 로그에서 이벤트를 가져옵니다.






예 7

C:\PS>$version = invoke-command -computername (get-content machines.txt) -scriptblock {(get-host).version}

설명
-----------
이 명령은 200대의 원격 컴퓨터에서 실행되는 Windows PowerShell 호스트의 버전을 가져옵니다. 

한 명령만 실행되기 때문에 각 컴퓨터에 영구 연결(세션)을 만들 필요가 없습니다. 대신 이 명령은 ComputerName 매개 변수를 사용하여 컴퓨터를 지정합니다.

이 명령은 Invoke-Command cmdlet을 사용하여 Get-Host 명령을 실행합니다. 이 명령은 점 표기법을 사용하여 Windows PowerShell 호스트의 Version 속성을 가져옵니다.

컴퓨터를 지정하기 위해 이 명령은 Get-Content cmdlet을 사용하여 컴퓨터 이름 파일인 Machine.txt 파일의 내용을 가져옵니다.

이들 명령은 동기적으로 실행됩니다(한 번에 하나씩). 명령이 완료되면 모든 컴퓨터의 명령 출력이 $version 변수에 저장됩니다. 출력에는 데이터가 제공된 컴퓨터의 이름이 포함됩니다.






예 8

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        --------             -------
1    Job1    Running    True          Server01,Server02  get-eventlog system


C:\PS> $j = Get-Job

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : Server01,Server02
Command       : get-eventlog system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
Id            : 1
Name          : Job1
ChildJobs     : {Job2, Job3}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $results = $j | Receive-Job

설명
-----------
이들 명령은 두 원격 컴퓨터에서 백그라운드 작업을 실행합니다. Invoke-Command 명령은 AsJob 매개 변수를 사용하기 때문에 원격 컴퓨터에서 명령이 실행되지만 실제로 작업은 로컬 컴퓨터에 있으며 결과가 로컬 컴퓨터로 전송됩니다.

첫 번째 명령은 New-PSSession cmdlet을 사용하여 Server01 및 Server02 원격 컴퓨터에서 세션을 만듭니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 각 세션에서 백그라운드 작업을 실행합니다. 이 명령은 AsJob 매개 변수를 사용하여 명령을 백그라운드 작업으로 실행합니다. 이 명령은 두 원격 컴퓨터에서 실행되는 각 작업에 해당하는 두 하위 작업 개체가 포함된 작업 개체를 반환합니다.

세 번째 명령은 Get-Job 명령을 사용하여 $j 변수에 작업 개체를 저장합니다. 

네 번째 명령은 파이프라인 연산자(|)를 사용하여 $j 변수의 값을 Format-List cmdlet으로 보냅니다. 이 cmdlet은 작업 개체의 모든 속성을 목록으로 표시합니다.

다섯 번째 명령은 작업의 결과를 가져옵니다. 이 명령은 $j의 작업 개체를 Receive-Job cmdlet으로 파이프하고 결과를 $results 변수에 저장합니다.






예 9

C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational

C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10

설명
-----------
이 예에서는 원격 컴퓨터에서 실행되는 명령에 로컬 변수 값을 포함하는 방법을 보여 줍니다.

첫 번째 명령은 Microsoft-Windows-Forwarding/Operational 이벤트 로그의 이름을 $MWFO-Log 변수에 저장합니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 Server01의 Microsoft-Windows-Forwarding/Operational 이벤트 로그에서 10개의 최신 이벤트를 가져오는 Get-EventLog 명령을 Server01 원격 컴퓨터에서 실행합니다.

이 명령은 "param" 키워드를 사용하여 Get-EventLog 명령에서 자리 표시자로 사용되는 두 변수 $log 및 $num을 만듭니다. 이러한 자리 표시자에는 값을 제공하는 로컬 변수의 이름과 일치할 필요가 없는 임의의 이름이 있습니다.

ArgumentList 매개 변수의 값은 인수 목록의 값을 지정하는 두 가지 방법을 보여 줍니다. $log 자리 표시자의 값은 첫 번째 명령에 정의된 $MFWO-Log 변수입니다. $num 변수의 값은 10입니다.

명령이 원격 컴퓨터로 전송되기 전에 변수가 지정된 값으로 대체됩니다.






예 10

C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershell} 

PSComputerName    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
--------------    -------  ------    -----      ----- -----   ------     --   -----------
S1                575      15        45100      40988   200     4.68     1392 powershell
S2                777      14        35100      30988   150     3.68     67   powershell


C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powershell} -HideComputerName

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
-------  ------    -----      ----- -----   ------     --   -----------
575      15        45100      40988   200     4.68     1392 powershell
777      14        35100      30988   150     3.68     67   powershell

설명
-----------
이 예에서는 Invoke-Command의 HideComputerName 매개 변수를 사용하는 경우의 효과를 보여 줍니다. 

처음 두 명령은 Invoke-Command cmdlet을 사용하여 PowerShell 프로세스에 대해 Get-Process 명령을 실행합니다. 첫 번째 명령의 출력에는 명령이 실행된 컴퓨터의 이름을 포함하는 PsComputerName 속성이 포함되어 있습니다. HideComputerName 매개 변수를 사용하는 두 번째 명령의 출력에는 PsComputerName 열이 포함되어 있지 않습니다.

HideComputerName 매개 변수를 사용하는 경우 개체가 변경되지 않습니다. Format cmdlet을 사용하여 영향을 받는 모든 개체의 PsComputerName 속성을 표시할 수 있습니다.






예 11

C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sample.ps1 -argumentlist Process, Service

설명
-----------
이 예에서는 Invoke-Command cmdlet을 사용하여 Servers.txt 파일에 나열된 모든 컴퓨터에서 Sample.ps1 스크립트를 실행합니다. 이 명령은 FilePath 매개 변수를 사용하여 스크립트 파일을 지정합니다. 이 명령을 사용하면 스크립트 파일에서 원격 컴퓨터에 액세스할 수 없는 경우에도 원격 컴퓨터에서 스크립트를 실행할 수 있습니다.

명령을 전송할 때 Sample.ps1 파일의 내용이 스크립트 블록에 복사되고 스크립트 블록이 각 원격 컴퓨터에서 실행됩니다. 이 절차는 ScriptBlock 매개 변수를 사용하여 스크립트의 내용을 전송하는 것과 동일합니다.






예 12

C:\PS>$LiveCred = Get-Credential

C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
         -ConnectionUri https://ps.exchangelabs.com/powershell `
         -Credential $LiveCred  -Authentication Basic `
         -scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Park"}

설명
-----------
이 예에서는 URI(인터넷 주소)로 식별된 원격 컴퓨터에서 명령을 실행하는 방법을 보여 줍니다. 이 예의 특정 부분에서는 원격 Exchange Server에서 Set-Mailbox 명령을 실행합니다. 명령의 역음(`)은 Windows PowerShell의 연속 문자입니다.

첫 번째 명령은 Get-Credential cmdlet을 사용하여 Windows Live ID 자격 증명을 $LiveCred 변수에 저장합니다. 자격 증명 대화 상자가 나타나면 Windows Live ID 자격 증명을 입력합니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 Set-Mailbox 명령을 실행합니다. 이 명령은 ConfigurationName 매개 변수를 사용하여 명령이 Microsoft.Exchange 세션 구성을 사용하는 세션에서 실행되도록 지정합니다. ConnectionURI 매개 변수는 Exchange Server 끝점의 URL을 지정합니다. 

Credential 매개 변수는 $LiveCred 변수에 저장된 Windows Live 자격 증명을 지정합니다. AuthenticationMechanism 매개 변수는 기본 인증의 사용을 지정합니다. ScriptBlock 매개 변수는 명령이 포함된 스크립트 블록을 지정합니다.






예 13

C:\PS>$max = New-PSSessionOption -MaximumRedirection 1

C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
         -scriptblock {Invoke-Command {Get-Mailbox dan} `
         -AllowRedirection -SessionOption $max

설명
-----------
이 명령은 AllowRedirection 및 SessionOption 매개 변수를 사용하여 원격 명령에서 URI 리디렉션을 관리하는 방법을 보여 줍니다.

첫 번째 명령은 New-PSSessionOption cmdlet을 사용하여 $max 변수에 저장되는 PSSessionOption 개체를 만듭니다. 이 명령은 MaximumRedirection 매개 변수를 사용하여 PSSessionOption 개체의 MaximumConnectionRedirectionCount 속성을 1로 설정합니다. 

두 번째 명령은 Invoke-Command cmdlet을 사용하여 Microsoft Exchange Server가 실행되는 원격 서버에서 Get-Mailbox 명령을 실행합니다. 이 명령은 AllowRedirection 매개 변수를 사용하여 대체 끝점으로 연결을 리디렉션할 수 있는 명시적 권한을 제공합니다. 또한 SessionOption 매개 변수를 사용하여 $max 변수의 세션 개체를 지정합니다.

따라서 ConnectionURI 매개 변수로 지정된 원격 컴퓨터가 리디렉션 메시지를 반환하는 경우 Windows PowerShell은 연결을 리디렉션하지만, 새 대상이 다른 리디렉션 메시지를 반환하는 경우 리디렉션 수 값 1이 초과되고 Invoke-Command가 종료되지 않는 오류를 반환합니다.






예 14

C:\PS>$so = New-PSSessionOption -SkipCACheck

PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential server01\user01

설명
-----------
이 예에서는 SessionOption 매개 변수를 만들고 사용하는 방법을 보여 줍니다. 

첫 번째 명령은 New-PSSessionOption cmdlet을 사용하여 세션 옵션을 만든 다음 결과 SessionOption 개체를 $so 매개 변수에 저장합니다.

두 번째 명령은 Invoke-Command cmdlet을 사용하여 Get-Hotfix 명령을 원격으로 실행합니다. SessionOption 매개 변수의 값은 $so 변수에 있는 SessionOption 개체입니다.






예 15

C:\PS>enable-wsmanCredSSP -delegate server02

C:\PS> connect-wsman Server02

C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true

C:\PS> $s = new-pssession server02

C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles.ps1} -authentication credssp -credential domain01\admin01

설명
-----------
이 예에서는 원격 세션 내에서 네트워크 공유에 액세스하는 방법을 보여 줍니다. 

이 명령을 실행하려면 로컬 컴퓨터의 클라이언트 설정과 원격 컴퓨터의 서비스 설정에서 CredSSP 위임을 사용하도록 설정해야 합니다. 이 예의 명령을 실행하려면 로컬 컴퓨터와 원격 컴퓨터에서 Administrators 그룹의 멤버여야 합니다.

첫 번째 명령은 Enable-WSManCredSSP cmdlet을 사용하여 Server01 로컬 컴퓨터에서 Server02 원격 컴퓨터로의 CredSSP 위임을 가능하게 합니다. 이 명령은 로컬 컴퓨터에 CredSSP 클라이언트 설정을 구성합니다.

두 번째 명령은 Connect-WSman cmdlet을 사용하여 Server02 컴퓨터에 연결합니다. 이 작업을 수행하면 Server02 컴퓨터에 대한 노드가 로컬 컴퓨터의 WSMan: 드라이브에 추가되어 Server02 컴퓨터의 WS-Management 설정을 보고 변경할 수 있습니다.

세 번째 명령은 Set-Item cmdlet을 사용하여 Server02 컴퓨터의 Service 노드에 있는 CredSSP 항목의 값을 True로 변경합니다. 이 작업을 수행하면 원격 컴퓨터의 서비스 설정에서 CredSSP를 사용할 수 있습니다.

네 번째 명령은 New-PSSession cmdlet을 사용하여 Server02 컴퓨터에서 PSSession을 만든 다음 $s 변수에 저장합니다.

다섯 번째 명령은 Invoke-Command cmdlet을 사용하여 세션의 $s에서 Net03\Scripts 네트워크 공유의 스크립트를 가져오는 Get-Item 명령을 실행합니다. 이 명령은 Credential 매개 변수를 사용하며 CredSSP 값과 함께 Authentication 매개 변수를 사용합니다.






참고 항목




목차