Invoke-Command

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

Syntax

Invoke-Command
      [-StrictMode <Version>]
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMId] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      [-Port <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-RunAsAdministrator]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -ContainerId <String[]>
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -HostName <String[]>
      [-UserName <String>]
      [-KeyFilePath <String>]
      [-Subsystem <String>]
      [-ConnectingTimeout <Int32>]
      [-SSHTransport]
      [-Options <Hashtable>]
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      -SSHConnection <Hashtable[]>
      [-RemoteDebug]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]

Description

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

원격 컴퓨터에서 단일 명령을 실행하려면 ComputerName 매개 변수를 사용합니다. 데이터를 공유하는 일련의 관련 명령을 실행하려면 cmdlet을 사용하여 New-PSSession 원격 컴퓨터에 PSSession(영구 연결)을 만든 다음 세션 매개 변수 Invoke-Command 를 사용하여 PSSession에서 명령을 실행합니다. 연결이 끊긴 세션에서 명령을 실행하려면 InDisconnectedSession 매개 변수를 사용합니다. 백그라운드 작업에서 명령을 실행하려면 AsJob 매개 변수를 사용합니다.

로컬 컴퓨터에서 스크립트 블록을 명령으로 실행하는 데 사용할 Invoke-Command 수도 있습니다. PowerShell은 현재 범위의 자식 범위에서 스크립트 블록을 즉시 실행합니다.

Invoke-Command 원격 컴퓨터에서 명령을 실행하기 전에 about_Remote 읽습니다.

PowerShell 6.0부터 SSH(Secure Shell)를 사용하여 원격 컴퓨터에 대한 연결을 설정하고 명령을 호출할 수 있습니다. 로컬 컴퓨터에 SSH를 설치해야 하며 원격 컴퓨터는 PowerShell SSH 엔드포인트를 사용하여 구성해야 합니다. SSH 기반 PowerShell 원격 세션의 이점은 여러 플랫폼(Windows, Linux, macOS)에서 작동한다는 것입니다. SSH 기반 세션의 경우 HostName 또는 SSH커넥트ion 매개 변수를 사용하여 원격 컴퓨터 및 관련 연결 정보를 지정합니다. PowerShell SSH 원격을 설정하는 방법에 대한 자세한 내용은 SSH를 통해 PowerShell 원격을 참조하세요.

일부 코드 샘플은 스플래팅을 사용하여 줄 길이를 줄입니다. 자세한 내용은 about_Splatting 참조하세요.

예제

예제 1: 서버에서 스크립트 실행

이 예제에서는 Test.ps1 Server01 컴퓨터에서 스크립트를 실행합니다.

Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

FilePath 매개 변수는 로컬 컴퓨터에 있는 스크립트를 지정합니다. 스크립트는 원격 컴퓨터에서 실행되고 결과는 로컬 컴퓨터로 반환됩니다.

예제 2: 원격 서버에서 명령 실행

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

Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock {
    Get-Culture
}

ComputerName 매개 변수는 원격 컴퓨터의 이름을 지정합니다. 자격 증명 매개 변수는 명령을 실행할 권한이 있는 사용자인 Do기본01\User01의 보안 컨텍스트에서 명령을 실행하는 데 사용됩니다. ScriptBlock 매개 변수는 원격 컴퓨터에서 실행할 명령을 지정합니다.

이에 대한 응답으로 PowerShell은 User01 계정에 대한 암호 및 인증 방법을 요청합니다. 그런 다음 Server01 컴퓨터에서 명령을 실행하고 결과를 반환합니다.

예제 3: 영구 연결에서 명령 실행

이 예제에서는 Server02라는 원격 컴퓨터에서 영구 연결을 사용하여 세션에서 동일한 Get-Culture 명령을 실행합니다.

$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock { Get-Culture }

cmdlet은 New-PSSession Server02 원격 컴퓨터에서 세션을 만들고 변수에 $s 저장합니다. 일반적으로 원격 컴퓨터에서 일련의 명령을 실행할 때만 세션을 만듭니다.

cmdlet은 Invoke-Command Server02에서 Get-Culture 명령을 실행합니다. Session 매개 변수는 변수에 $s 저장된 세션을 지정합니다.

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

예제 4: 세션을 사용하여 데이터를 공유하는 일련의 명령 실행

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

Invoke-Command -ComputerName Server02 -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -ComputerName Server02 -ScriptBlock { $p.VirtualMemorySize }
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock { $p = Get-Process PowerShell }
Invoke-Command -Session $s -ScriptBlock { $p.VirtualMemorySize }

17930240

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

ComputerName 매개 변수를 사용하는 경우 PowerShell은 명령을 실행하는 새 세션을 만듭니다. 명령이 완료되면 세션이 닫힙니다. 변수는 $p 한 연결에서 만들어졌지만 두 번째 명령에 대해 만든 연결에는 존재하지 않습니다.

이 문제는 원격 컴퓨터에서 영구 세션을 만든 다음 동일한 세션에서 두 명령을 모두 실행하여 해결됩니다.

cmdlet은 New-PSSession 컴퓨터 Server02에 영구 세션을 만들고 변수에 $s 세션을 저장합니다. 다음 줄은 Invoke-Command Session 매개 변수를 사용하여 동일한 세션에서 두 명령을 모두 실행합니다. 두 명령이 동일한 세션에서 실행되므로 값이 $p 다시 활성화됩니다기본.

예제 5: 변수에 저장된 스크립트 블록을 사용하여 명령 호출

이 예제에서는 변수에 스크립트 블록으로 저장된 명령을 실행하는 방법을 보여줍니다. 스크립트 블록이 변수에 저장되면 변수를 ScriptBlock 매개 변수의 값으로 지정할 수 있습니다.

$command = {
    Get-WinEvent -LogName PowerShellCore/Operational |
      Where-Object -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

변수는 $command 스크립트 블록으로 형식이 지정된 명령을 저장 Get-WinEvent 합니다. S1 Invoke-Command 및 S2 원격 컴퓨터에 저장된 $command 명령을 실행합니다.

예제 6: 여러 컴퓨터에서 단일 명령 실행

이 예제에서는 여러 컴퓨터에서 단일 명령을 실행하는 방법을 Invoke-Command 보여 줍니다.

$parameters = @{
  ComputerName      = 'Server01', 'Server02', 'TST-0143', 'localhost'
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock       = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters

ComputerName 매개 변수는 컴퓨터 이름의 쉼표로 구분된 목록을 지정합니다. 컴퓨터 목록에는 로컬 컴퓨터를 나타내는 localhost 값이 포함됩니다. ConfigurationName 매개 변수는 대체 세션 구성을 지정합니다. ScriptBlock 매개 변수는 각 컴퓨터에서 PowerShellCore/Operational 이벤트 로그를 가져오기 위해 실행됩니다Get-WinEvent.

예제 7: 여러 컴퓨터에서 호스트 프로그램의 버전 가져오기

이 예제에서는 200개 원격 컴퓨터에서 실행되는 PowerShell 호스트 프로그램의 버전을 가져옵니다.

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {
    (Get-Host).Version
}

명령이 하나만 실행되므로 각 컴퓨터에 대한 영구 연결을 만들 필요가 없습니다. 대신 이 명령은 ComputerName 매개 변수를 사용하여 컴퓨터를 나타냅니다. 컴퓨터를 지정하려면 cmdlet을 Get-Content 사용하여 컴퓨터 이름의 파일인 Machine.txt 파일의 내용을 가져옵니다.

cmdlet은 Invoke-Command 원격 컴퓨터에서 Get-Host 명령을 실행합니다. 점 표기법을 사용하여 PowerShell 호스트의 Version 속성을 가져옵니다.

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

예제 8: 여러 원격 컴퓨터에서 백그라운드 작업 실행

이 예제에서는 두 원격 컴퓨터에서 명령을 실행합니다. 명령은 Invoke-Command AsJob 매개 변수를 사용하여 명령이 백그라운드 작업으로 실행되도록 합니다. 명령은 원격 컴퓨터에서 실행되지만 작업은 로컬 컴퓨터에 있습니다. 결과는 로컬 컴퓨터로 전송됩니다.

$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock { Get-EventLog system } -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        ---------------
1    Job1    Running    True          Server01,Server02  Get-EventLog system

$j = Get-Job
$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  :

$results = $j | Receive-Job

cmdlet은 New-PSSession Server01 및 Server02 원격 컴퓨터에서 세션을 만듭니다. cmdlet은 Invoke-Command 각 세션에서 백그라운드 작업을 실행합니다. 이 명령은 AsJob 매개 변수를 사용하여 명령을 백그라운드 작업으로 실행합니다. 이 명령은 두 개의 원격 컴퓨터에서 실행되는 각 작업에 대해 하나씩 두 개의 자식 작업 개체를 포함하는 작업 개체를 반환합니다.

Get-Job 명령은 작업 개체를 변수에 $j 저장합니다. $j 그런 다음, 변수를 cmdlet에 Format-List 파이프하여 목록에 작업 개체의 모든 속성을 표시합니다. 마지막 명령은 작업의 결과를 가져옵니다. 작업 개체를 cmdlet으로 $jReceive-Job 파이프하고 결과를 변수에 $results 저장합니다.

예제 9: 원격 컴퓨터에서 실행되는 명령에 지역 변수 포함

이 예제에서는 원격 컴퓨터에서 실행되는 명령에 지역 변수 값을 포함하는 방법을 보여 줍니다. 이 명령은 범위 한정자를 사용하여 Using 원격 명령에서 지역 변수를 식별합니다. 기본적으로 모든 변수는 원격 세션에서 정의되는 것으로 간주됩니다. Using 범위 한정자는 PowerShell 3.0에서 도입되었습니다. 범위 한정자에 Using 대한 자세한 내용은 about_Remote_Variables 및 about_Scopes 참조하세요.

$Log = 'PowerShellCore/Operational'
Invoke-Command -ComputerName Server01 -ScriptBlock {
    Get-WinEvent -LogName $Using:Log -MaxEvents 10
}

변수는 $Log 이벤트 로그의 이름인 PowerShellCore/Operational을 저장합니다. cmdlet은 Invoke-Command Server01에서 실행 Get-WinEvent 되어 이벤트 로그에서 10개의 최신 이벤트를 가져옵니다. LogName 매개 변수의 값은 $Log 원격 세션이 아닌 로컬 세션에서 생성되었음을 나타내기 위해 범위 한정자가 접두 Using 사로 사용하는 변수입니다.

예제 10: 컴퓨터 이름 숨기기

이 예제에서는 .의 HideComputerName 매개 변수Invoke-Command를 사용하는 효과를 보여줍니다. HideComputerName 은 이 cmdlet이 반환하는 개체를 변경하지 않습니다. 디스플레이만 변경합니다. Format cmdlet을 사용하여 영향을 받는 개체의 PsComputerName 속성을 표시할 수 있습니다.

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

Invoke-Command -ComputerName S1, S2 -HideComputerName -ScriptBlock {
    Get-Process PowerShell
}

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

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

예제 11: 스크립트 블록에서 Param 키워드(keyword) 사용

Param 키워드(keyword) 및 ArgumentList 매개 변수는 스크립트 블록의 명명된 매개 변수에 변수 값을 전달하는 데 사용됩니다. 다음은 문자 a 로 시작하고 확장명이 있는 파일 이름을 표시하는 예제입니다 .pdf .

키워드(keyword) 대한 Param 자세한 내용은 about_Language_Keywords 참조하세요.

$parameters = @{
    ComputerName = 'Server01'
    ScriptBlock  = {
        Param ($param1, $param2)
        Get-ChildItem -Name $param1 -Include $param2
    }
    ArgumentList = 'a*', '*.pdf'
}
Invoke-Command @parameters

aa.pdf
ab.pdf
ac.pdf
az.pdf

Invoke-Command두 개의 변수를 정의하는 ScriptBlock 매개 변수를 $param1$param2사용합니다. Get-ChildItem는 명명된 매개 변수인 Name 및 Include변수 이름으로 사용합니다. ArgumentList값을 변수에 전달합니다.

예제 12: 스크립트 블록에서 $args 자동 변수 사용

$args 자동 변수 및 ArgumentList 매개 변수는 배열 값을 스크립트 블록의 매개 변수 위치에 전달하는 데 사용됩니다. 이 예제에서는 파일의 서버 디렉터리 콘텐츠를 표시합니다 .txt . Get-ChildItemPath 매개 변수는 위치 0이고 Filter 매개 변수는 위치 1입니다.

변수에 대한 $args 자세한 내용은 about_Automatic_Variables 참조 하세요.

$parameters = @{
    ComputerName = 'Server01'
    ScriptBlock  = { Get-ChildItem $args[0] $args[1] }
    ArgumentList = 'C:\Test', '*.txt*'
}
Invoke-Command @parameters

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           6/12/2019    15:15            128 alog.txt
-a---           7/27/2019    15:16            256 blog.txt
-a---           9/28/2019    17:10             64 zlog.txt

Invoke-Command는 ScriptBlock 매개 변수를 Get-ChildItem 사용하고 배열 값과 $args[1] 배열 값을 지정합니다$args[0]. ArgumentList는 배열 값을 경로필터Get-ChildItem 매개 변수 위치에 전달 $args 합니다.

예제 13: 텍스트 파일에 나열된 모든 컴퓨터에서 스크립트 실행

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

$parameters = @{
    ComputerName = (Get-Content Servers.txt)
    FilePath     = 'C:\Scripts\Sample.ps1'
    ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters

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

예제 14: URI를 사용하여 원격 컴퓨터에서 명령 실행

이 예제에서는 URI(Uniform Resource Identifier)로 식별되는 원격 컴퓨터에서 명령을 실행하는 방법을 보여 줍니다. 이 특정 예제에서는 Set-Mailbox 원격 Exchange 서버에서 명령을 실행합니다.

$LiveCred = Get-Credential
$parameters = @{
  ConfigurationName = 'Microsoft.Exchange'
  ConnectionUri     = 'https://ps.exchangelabs.com/PowerShell'
  Credential        = $LiveCred
  Authentication    = 'Basic'
  ScriptBlock       = { Set-Mailbox Dan -DisplayName 'Dan Park' }
}
Invoke-Command @parameters

첫 번째 줄은 cmdlet을 Get-Credential 사용하여 변수에 Windows Live ID 자격 증명을 $LiveCred 저장합니다. PowerShell은 사용자에게 Windows Live ID 자격 증명을 입력하라는 메시지를 표시합니다.

변수는 $parameters cmdlet에 전달할 Invoke-Command 매개 변수를 포함하는 해시 테이블입니다. cmdlet은 Invoke-Command Microsoft.Exchange 세션 구성을 사용하여 명령을 실행 Set-Mailbox 합니다. 커넥트ionURI 매개 변수는 Exchange 서버 엔드포인트의 URL을 지정합니다. 자격 증명 매개 변수는 변수에 저장된 자격 증명을 $LiveCred 지정합니다. AuthenticationMechanism 매개 변수는 기본 인증의 사용을 지정합니다. ScriptBlock 매개 변수는 명령이 포함된 스크립트 블록을 지정합니다.

예제 15: 세션 옵션 사용

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

$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$parameters = @{
    ComputerName  = 'server01'
    UseSSL        = $true
    ScriptBlock   = { Get-HotFix }
    SessionOption = $so
    Credential    = 'server01\user01'
}
Invoke-Command @parameters

이 cmdlet은 New-PSSessionOption 들어오는 HTTPS 연결을 평가하는 동안 원격 엔드가 인증 기관, 정식 이름 및 해지 목록을 확인하지 않도록 하는 세션 옵션 개체를 만듭니다. SessionOption 개체가 변수에 $so 저장됩니다.

참고 항목

이러한 검사 사용하지 않도록 설정하면 문제 해결에 편리하지만 안전하지는 않습니다.

cmdlet은 Invoke-Command 원격으로 Get-HotFix 명령을 실행합니다. SessionOption 매개 변수에 변수가 $so 제공됩니다.

예제 16: 원격 명령에서 URI 리디렉션 관리

이 예제에서는 AllowRedirectionSessionOption 매개 변수를 사용하여 원격 명령에서 URI 리디렉션을 관리하는 방법을 보여 줍니다.

$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
  ConnectionUri    = 'https://ps.exchangelabs.com/PowerShell'
  ScriptBlock      = { Get-Mailbox dan }
  AllowRedirection = $true
  SessionOption    = $max
}
Invoke-Command @parameters

cmdlet은 New-PSSessionOption 변수에 저장된 PSSessionOption 개체를 $max 만듭니다. 이 명령은 MaximumRedirection 매개 변수를 사용하여 PSSessionOption 개체의 Maximum커넥트ionRedirectionCount 속성을 1로 설정합니다.

cmdlet은 Invoke-Command 원격 Microsoft Exchange Server에서 명령을 실행 Get-Mailbox 합니다. AllowRedirection 매개 변수는 연결을 대체 엔드포인트로 리디렉션할 수 있는 명시적 권한을 제공합니다. SessionOption 매개 변수는 변수에 저장된 세션 개체를 $max 사용합니다.

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

예제 17: 원격 세션에서 네트워크 공유 액세스

이 예제에서는 원격 세션에서 네트워크 공유에 액세스하는 방법을 보여줍니다. 예제를 보여 주는 데 세 대의 컴퓨터가 사용됩니다. Server01은 로컬 컴퓨터이고, Server02는 원격 컴퓨터이고, Net03에는 네트워크 공유가 포함됩니다. Server01은 Server02에 연결한 다음, Server02는 네트워크 공유에 액세스하기 위해 Net03에 두 번째 홉을 수행합니다. PowerShell Remoting이 컴퓨터 간 홉을 지원하는 방법에 대한 자세한 내용은 PowerShell 원격에서 두 번째 홉 만들기를 참조하세요.

필요한 CredSSP(자격 증명 보안 지원 공급자) 위임은 로컬 컴퓨터의 클라이언트 설정 및 원격 컴퓨터의 서비스 설정에서 사용하도록 설정됩니다. 이 예제에서 명령을 실행하려면 로컬 컴퓨터와 원격 컴퓨터에서 관리istrators 그룹의 구성원이어야 합니다.

Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock { Enable-WSManCredSSP -Role Server -Force }
$parameters = @{
  ComputerName   = 'Server02'
  ScriptBlock    = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = 'CredSSP'
  Credential     = 'Domain01\Admin01'
}
Invoke-Command @parameters

Enable-WSManCredSSP cmdlet은 Server01 로컬 컴퓨터에서 Server02 원격 컴퓨터로 CredSSP 위임을 사용하도록 설정합니다. Role 매개 변수는 로컬 컴퓨터에서 CredSSP 클라이언트 설정을 구성하도록 클라이언트를 지정합니다.

New-PSSessionServer02에 대한 PSSession 개체를 만들고 변수에 개체를 $s 저장합니다.

cmdlet은 Invoke-Command 변수를 $s 사용하여 원격 컴퓨터인 Server02에 연결합니다. ScriptBlock 매개 변수는 원격 컴퓨터에서 실행됩니다Enable-WSManCredSSP. Role 매개 변수는 원격 컴퓨터에서 CredSSP 서버 설정을 구성하는 서버를 지정 합니다.

변수에는 $parameters 네트워크 공유에 연결할 매개 변수 값이 포함됩니다. cmdlet은 Invoke-Command 세션의 Get-Item 명령을 실행합니다 $s. 이 명령은 네트워크 공유에서 스크립트를 \\Net03\Scripts 가져옵니다. 이 명령은 CredSSP 값이 있는 Authentication 매개 변수와 Do기본01\관리01 값이 있는 자격 증명 매개 변수를 사용합니다.

예제 18: 여러 원격 컴퓨터에서 스크립트 시작

이 예제에서는 100대 이상의 컴퓨터에서 스크립트를 실행합니다. 로컬 컴퓨터에 미치는 영향을 최소화하기 위해 각 컴퓨터에 연결하고 스크립트를 시작한 다음 각 컴퓨터에서 연결을 끊습니다. 스크립트는 연결이 끊긴 세션에서 계속 실행됩니다.

$parameters = @{
  ComputerName          = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath              = '\\Scripts\Public\ConfigInventory.ps1'
  SessionOption         = @{
      OutputBufferingMode = 'Drop'
      IdleTimeout         = [timespan]::FromHours(12)
  }
}
Invoke-Command @parameters

이 명령은 스크립트를 실행하는 데 사용합니다 Invoke-Command . ComputerName 매개 변수의 값은 텍스트 파일에서 원격 컴퓨터의 이름을 가져오는 명령입니다Get-Content. InDisconnectedSession 매개 변수는 명령을 시작하는 즉시 세션의 연결을 끊습니다. FilePath 매개 변수의 값은 각 컴퓨터에서 실행되는 스크립트 Invoke-Command 입니다.

SessionOption값은 해시 테이블입니다. OutputBufferingMode 값이 설정 Drop 되고 IdleTimeout 값이 12시간으로 설정됩니다.

연결이 끊긴 세션에서 실행되는 명령 및 스크립트의 결과를 얻으려면 cmdlet을 Receive-PSSession 사용합니다.

예제 19: SSH를 사용하여 원격 컴퓨터에서 명령 실행

이 예제에서는 SSH(Secure Shell)를 사용하여 원격 컴퓨터에서 명령을 실행하는 방법을 보여 줍니다. 원격 컴퓨터에서 암호를 묻는 메시지를 표시하도록 SSH가 구성된 경우 암호 프롬프트가 표시됩니다. 그렇지 않으면 SSH 키 기반 사용자 인증을 사용해야 합니다.

Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }

예제 20: SSH를 사용하여 원격 컴퓨터에서 명령을 실행하고 사용자 인증 키를 지정합니다.

이 예제에서는 SSH를 사용하여 원격 컴퓨터에서 명령을 실행하고 사용자 인증을 위해 키 파일을 지정하는 방법을 보여줍니다. 키 인증이 실패하고 원격 컴퓨터가 기본 암호 인증을 허용하도록 구성되지 않으면 암호를 묻는 메시지가 표시되지 않습니다.

$parameters = @{
    HostName    = 'UserA@LinuxServer01'
    ScriptBlock = { Get-MailBox * }
    KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command

예제 21: SSH를 작업으로 사용하여 여러 원격 컴퓨터에서 스크립트 파일 실행

이 예제에서는 SSH 및 SSH커넥트ion 매개 변수 집합을 사용하여 여러 원격 컴퓨터에서 스크립트 파일을 실행하는 방법을 보여줍니다. SSH커넥트ion 매개 변수는 각 컴퓨터에 대한 연결 정보를 포함하는 해시 테이블 배열을 사용합니다. 이 예제에서는 대상 원격 컴퓨터에서 키 기반 사용자 인증을 지원하도록 SSH를 구성해야 합니다.

$sshConnections = @(
    @{
        HostName    = "WinServer1"
        UserName    = "Domain\UserA"
        KeyFilePath = "C:\Users\UserA\id_rsa"
    }
    @{
        HostName    = "UserB@LinuxServer5"
        KeyFilePath = "/Users/UserB/id_rsa"
    }
)
$results = Invoke-Command -FilePath c:\Scripts\GetInfo.ps1 -SSHConnection $sshConnections

예제 22: SSH 옵션을 사용하여 원격 SSH 세션에 커넥트

이 예제에서는 SSH 옵션을 사용하여 원격 Linux 기반 컴퓨터에서 스크립트 파일을 실행하는 방법을 보여 줍니다. Options 매개 변수는 원격 시스템에 대한 연결을 설정한 기본 ssh 명령에 옵션으로 전달되는 값의 해시 테이블을 사용합니다.

$options = @{
    Port=22
    User = 'UserB'
    Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options

매개 변수

-AllowRedirection

이 연결을 대체 URI(Uniform Resource Identifier)로 리디렉션할 수 있습니다.

커넥트ionURI 매개 변수를 사용하는 경우 원격 대상은 다른 URI로 리디렉션하는 명령을 반환할 수 있습니다. 기본적으로 PowerShell은 연결을 리디렉션하지 않지만 이 매개 변수를 사용하여 연결을 리디렉션할 수 있습니다.

최대커넥트ionRedirectionCount 세션 옵션 값을 변경하여 연결이 리디렉션되는 횟수를 제한할 수도 있습니다. cmdlet의 MaximumRedirection 매개 변수를 New-PSSessionOption 사용하거나 기본 설정 변수의 Maximum커넥트ionRedirectionCount 속성을 $PSSessionOption 설정합니다. 기본 값은 5입니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

연결 URI의 애플리케이션 이름 세그먼트를 지정합니다. 명령에서 커넥트ionURI 매개 변수를 사용하지 않을 때 이 매개 변수를 사용하여 애플리케이션 이름을 지정합니다.

기본값은 로컬 컴퓨터의 $PSSessionApplicationName 기본 설정 변수 값입니다. 이 기본 설정 변수가 정의되지 않은 경우 기본값은 WSMAN입니다. 이 값은 대부분의 사용에 적합합니다. 자세한 내용은 about_Preference_Variables 참조하세요.

WinRM 서비스는 애플리케이션 이름을 사용하여 연결 요청을 서비스할 수신기를 선택합니다. 이 매개 변수의 값은 원격 컴퓨터에서 수신기의 URLPrefix 속성 값과 일치해야 합니다.

Type:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ArgumentList

scriptblock에 대한 매개 변수 값을 제공합니다. 스크립트 블록의 매개 변수는 ArgumentList에 제공된 배열 값의 위치에 의해 전달됩니다. 이를 배열 스플래팅이라고 합니다. ArgumentList동작에 대한 자세한 내용은 about_Splatting 참조하세요.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

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

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

AsJob 매개 변수는 cmdlet을 Invoke-Command 사용하여 cmdlet을 원격으로 Start-Job 실행하는 것과 유사합니다. 그러나 AsJob을 사용하면 작업이 원격 컴퓨터에서 실행되더라도 로컬 컴퓨터에서 작업이 만들어집니다. 원격 작업의 결과는 자동으로 로컬 컴퓨터에 반환됩니다.

PowerShell 백그라운드 작업에 대한 자세한 내용은 about_Jobsabout_Remote_Jobs 참조하세요.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

사용자의 자격 증명을 인증하는 데 사용되는 메커니즘을 지정합니다. CredSSP 인증은 Windows Vista, Windows Server 2008 이상 버전의 Windows 운영 체제에서만 사용할 수 있습니다.

이 매개 변수에 허용되는 값은 다음과 같습니다.

  • 기본값
  • 기본
  • Credssp
  • 다이제스트
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

기본값은 Default입니다.

이 매개 변수의 값에 대한 자세한 내용은 AuthenticationMechanism 열거형을 참조 하세요.

주의

사용자의 자격 증명이 인증될 원격 컴퓨터에 전달되는 CredSSP(자격 증명 보안 지원 공급자) 인증은 원격 네트워크 공유 액세스와 같이 둘 이상의 리소스에 대한 인증이 필요한 명령을 위해 설계되었습니다. 이 메커니즘은 원격 작업의 보안 위험을 높입니다. 원격 컴퓨터가 손상된 경우 이 컴퓨터로 전달된 자격 증명을 사용하여 네트워크 세션을 제어할 수 있습니다. 자세한 내용은 자격 증명 보안 지원 공급자를 참조 하세요.

Type:AuthenticationMechanism
Accepted values:Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

연결이 끊긴 세션에 연결할 수 있는 권한이 있는 사용자 계정의 디지털 공개 키 인증서(X509)를 지정합니다. 인증서의 인증서 지문을 입력합니다.

인증서는 클라이언트 인증서 기반 인증에 사용됩니다. 로컬 사용자 계정에만 매핑할 수 있으며 do기본 계정에서는 작동하지 않습니다.

인증서 지문을 가져오려면 PowerShell 인증서: 드라이브에서 또는 Get-ChildItem 명령을 사용합니다Get-Item.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

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

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

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

ComputerName에 IP 주소를 사용하려면 명령에 자격 증명 매개 변수가 포함되어야 합니다. HTTPS 전송을 위해 컴퓨터를 구성해야 하거나 원격 컴퓨터의 IP 주소를 로컬 컴퓨터의 WinRM TrustedHosts 목록에 포함해야 합니다. TrustedHosts 목록에 컴퓨터 이름을 추가하는 지침은 신뢰할 수 있는 호스트 목록에 컴퓨터를 추가하는 방법을 참조하세요.

Windows Vista 이상 버전의 Windows 운영 체제에서 ComputerName에 로컬 컴퓨터를 포함하려면 관리자 권한으로 실행 옵션을 사용하여 PowerShell을 실행해야 합니다.

Type:String[]
Aliases:Cn
Position:0
Default value:Local computer
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConfigurationName

PSSession에 사용되는 세션 구성을 지정합니다.

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

SSH와 함께 사용할 경우 이 매개 변수는 에 정의된 sshd_config대로 대상에 사용할 하위 시스템을 지정합니다. SSH의 기본값은 하위 시스템입니다 powershell .

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

기본값은 로컬 컴퓨터의 $PSSessionConfigurationName 기본 설정 변수 값입니다. 이 기본 설정 변수가 설정되지 않은 경우 기본값은 Microsoft.PowerShell입니다. 자세한 내용은 about_Preference_Variables 참조하세요.

Type:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectingTimeout

초기 SSH 연결을 완료하는 데 허용되는 시간(밀리초)을 지정합니다. 지정된 시간 내에 연결이 완료되지 않으면 오류가 반환됩니다.

이 매개 변수는 PowerShell 7.2에서 도입되었습니다.

Type:Int32
Position:Named
Default value:Unlimited
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionUri

세션의 연결 엔드포인트를 정의하는 URI(Uniform Resource Identifier)를 지정합니다. URI는 정규화되어야 합니다.

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

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

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

http://localhost:5985/WSMAN

연결 URI를 지정하지 않으면 UseSSL포트 매개 변수를 사용하여 연결 URI 값을 지정할 수 있습니다.

URI의 전송 세그먼트에 유효한 값은 HTTP 및 HTTPS입니다. 전송 세그먼트를 사용하여 연결 URI를 지정하지만 포트를 지정하지 않으면 HTTP의 경우 80, HTTPS의 경우 443이라는 표준 포트를 사용하여 세션이 만들어집니다. PowerShell 원격에 기본 포트를 사용하려면 HTTP용 포트 5985 또는 HTTPS의 경우 5986을 지정합니다.

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

Type:Uri[]
Aliases:URI, CU
Position:0
Default value:http://localhost:5985/WSMAN
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContainerId

컨테이너 ID의 배열을 지정합니다.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Credential

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

User01 또는 Do기본01\User01과 같은 사용자 이름을 입력하거나 cmdlet에서 생성된 PSCredential 개체를 Get-Credential 입력합니다. 사용자 이름을 입력하면 암호를 입력하라는 메시지가 표시됩니다.

자격 증명은 PSCredential 개체에 저장되고 암호는 SecureString으로 저장됩니다.

참고 항목

SecureString 데이터 보호에 대한 자세한 내용은 SecureString이 얼마나 안전한가요?를 참조하세요.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

이 cmdlet은 루프백 세션에 대화형 보안 토큰을 추가한다는 것을 나타냅니다. 대화형 토큰을 사용하면 루프백 세션에서 다른 컴퓨터에서 데이터를 가져오는 명령을 실행할 수 있습니다. 예를 들어 원격 컴퓨터에서 로컬 컴퓨터로 XML 파일을 복사하는 명령을 세션에서 실행할 수 있습니다.

루프백 세션은 동일한 컴퓨터에서 시작되고 끝나는 PSSession 입니다. 루프백 세션을 만들려면 ComputerName 매개 변수를 생략하거나 해당 값을 점(.), localhost 또는 로컬 컴퓨터의 이름으로 설정합니다.

기본적으로 루프백 세션은 네트워크 토큰을 사용하여 생성되며 원격 컴퓨터에 인증하기에 충분한 권한을 제공하지 못할 수 있습니다.

EnableNetworkAccess 매개 변수는 루프백 세션에서만 유효합니다. 원격 컴퓨터에서 세션을 만들 때 EnableNetworkAccess를 사용하면 명령이 성공하지만 매개 변수는 무시됩니다.

세션 자격 증명을 다른 컴퓨터에 위임하는 인증 매개 변수의 CredSSP 값을 사용하여 루프백 세션에서 원격 액세스를 허용할 수 있습니다.

악의적인 액세스로부터 컴퓨터를 보호하기 위해 EnableNetworkAccess를 사용하여 만든 대화형 토큰이 있는 연결이 끊긴 루프백 세션은 세션이 만들어진 컴퓨터에서만 다시 연결할 수 있습니다. CredSSP 인증을 사용하는 연결이 끊긴 세션은 다른 컴퓨터에서 다시 연결할 수 있습니다. 자세한 내용은 Disconnect-PSSession를 참조하세요.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

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

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

Type:String
Aliases:PSPath
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-HideComputerName

이 cmdlet은 출력 디스플레이에서 각 개체의 컴퓨터 이름을 생략합니다. 기본적으로 개체를 생성한 컴퓨터의 이름이 디스플레이에 나타납니다.

이 매개 변수는 출력 디스플레이에만 영향을 줍니다. 개체는 변경되지 않습니다.

Type:SwitchParameter
Aliases:HCN
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

SSH(Secure Shell) 기반 연결에 대한 컴퓨터 이름 배열을 지정합니다. 이는 원격 컴퓨터에 대한 연결이 Windows WinRM이 아닌 SSH를 사용하여 수행된다는 점을 제외하고 ComputerName 매개 변수와 유사합니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InDisconnectedSession

이 cmdlet은 연결이 끊긴 세션에서 명령 또는 스크립트를 실행한다는 것을 나타냅니다.

InDisconnectedSession 매개 변수 Invoke-Command 를 사용하는 경우 각 원격 컴퓨터에서 영구 세션을 만들고 ScriptBlock 또는 FilePath 매개 변수로 지정된 명령을 시작한 다음 세션에서 연결을 끊습니다. 이 명령은 연결이 끊긴 세션에서 계속 실행됩니다. InDisconnectedSession을 사용하면 원격 세션에 대한 연결을 기본 않고 명령을 실행할 수 있습니다. 또한 결과가 반환 되기 전에 세션의 연결이 끊어지므로 InDisconnectedSession 은 세션 간에 분할되는 대신 모든 명령 결과가 다시 연결된 세션으로 반환되도록 합니다.

Session 매개 변수 또는 AsJob 매개 변수와 함께 InDisconnectedSession사용할 수 없습니다.

InDisconnectedSession을 사용하는 명령은 연결이 끊긴 세션을 나타내는 PSSession 개체를 반환 합니다. 명령 출력을 반환하지 않습니다. 연결이 끊긴 세션에 연결하려면 or Receive-PSSession cmdlet을 Connect-PSSession 사용합니다. 세션에서 실행된 명령의 결과를 얻으려면 cmdlet을 Receive-PSSession 사용합니다. 연결이 끊긴 세션에서 출력을 생성하는 명령을 실행하려면 OutputBufferingMode 세션 옵션의 값을 Drop으로 설정합니다. 연결이 끊긴 세션에 연결하려는 경우 세션을 삭제하기 전에 연결할 수 있는 충분한 시간을 제공하도록 세션에서 유휴 시간 초과를 설정합니다.

SessionOption 매개 변수 또는 기본 설정 변수에서 출력 버퍼링 모드 및 유휴 시간 초과를 $PSSessionOption 설정할 수 있습니다. 세션 옵션에 대한 자세한 내용은 about_Preference_Variables New-PSSessionOption.

연결이 끊긴 세션 기능에 대한 자세한 내용은 about_Remote_Disconnected_Sessions 참조하세요.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:SwitchParameter
Aliases:Disconnected
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

InputObject 매개 변수를 사용하는 경우 ScriptBlock 매개 변수 값에 자동 변수를 사용하여 $Input 입력 개체를 나타냅니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-JobName

백그라운드 작업의 이름을 지정합니다. 기본적으로 작업의 이름은 Job<n><n> 서수입니다.

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

PowerShell 백그라운드 작업에 대한 자세한 내용은 about_Jobs 참조하세요.

Type:String
Position:Named
Default value:Job<n>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyFilePath

SSH(Secure Shell)에서 원격 컴퓨터에서 사용자를 인증하는 데 사용하는 키 파일 경로를 지정합니다.

SSH를 사용하면 기본 암호 인증 대신 프라이빗 및 퍼블릭 키를 통해 사용자 인증을 수행할 수 있습니다. 원격 컴퓨터가 키 인증을 위해 구성된 경우 이 매개 변수를 사용하여 사용자를 식별하는 키를 제공할 수 있습니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:String
Aliases:IdentityFilePath
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewScope

이 cmdlet이 현재 범위에서 지정된 명령을 실행했음을 나타냅니다. 기본적으로 Invoke-Command 고유한 범위에서 명령을 실행합니다.

이 매개 변수는 현재 세션에서 실행되는 명령, 즉 ComputerNameSession 매개 변수를 모두 생략하는 명령에서만 유효합니다.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Options

원격 SSH 기반 세션에 연결할 때 사용되는 SSH 옵션의 해시 테이블을 지정합니다. 가능한 옵션은 Unix 기반 버전의 ssh 명령에서 지원하는 모든 값입니다.

매개 변수에 의해 명시적으로 전달된 모든 값이 Options hashtable에 전달된 값보다 우선합니다. 예를 들어 포트 매개 변수를 사용하면 Options hashtable에 전달된 키Port-값 쌍이 재정의됩니다.

이 매개 변수는 PowerShell 7.3에 추가되었습니다.

Type:Hashtable
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Port

이 명령에 사용되는 원격 컴퓨터의 네트워크 포트를 지정합니다. 원격 컴퓨터에 연결하려면 원격 컴퓨터가 연결에서 사용하는 포트에서 수신 대기해야 합니다. 기본 포트는 5985(HTTP용 WinRM 포트) 및 5986(HTTPS의 경우 WinRM 포트)입니다.

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

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

반드시 사용해야 하는 경우가 아니면 포트 매개 변수를 사용하지 마세요. 명령에 설정된 포트는 명령이 실행되는 모든 컴퓨터 또는 세션에 적용됩니다. 대체 포트 설정을 사용하면 명령이 모든 컴퓨터에서 실행되지 않을 수 있습니다.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RemoteDebug

원격 PowerShell 세션에서 디버그 모드에서 호출된 명령을 실행하는 데 사용됩니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAsAdministrator

이 cmdlet이 명령을 관리istrator로 호출한다는 것을 나타냅니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

실행할 명령을 지정합니다. 명령을 중괄호({ })로 묶어 스크립트 블록을 만듭니다. 명령을 원격으로 실행하는 데 사용하는 Invoke-Command 경우 명령의 모든 변수는 원격 컴퓨터에서 평가됩니다.

참고 항목

scriptblock에 대한 매개 변수는 위치별로 ArgumentList에서만 전달할 수 있습니다. 스위치 매개 변수는 위치별로 전달할 수 없습니다. SwitchParameter 형식처럼 동작하는 매개 변수가 필요한 경우 대신 부울 형식을 사용합니다.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Session

이 cmdlet이 명령을 실행하는 세션 배열을 지정합니다. PSSession 개체 또는 PSSession 개체를 만들거나 가져오는 명령(예: 명령)이 포함된 변수를 New-PSSessionGet-PSSession 입력합니다.

PSSession만들 때 PowerShell은 원격 컴퓨터에 대한 영구 연결을 설정합니다. PSSession사용하여 데이터를 공유하는 일련의 관련 명령을 실행합니다. 단일 명령 또는 일련의 관련 없는 명령을 실행하려면 ComputerName 매개 변수를 사용합니다. 자세한 내용은 about_PSSessions 참조하세요.

Type:PSSession[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionName

연결이 끊긴 세션의 이름을 지정합니다. 이 이름을 사용하여 명령과 같은 Get-PSSession 후속 명령에서 세션을 참조할 수 있습니다. 이 매개 변수는 InDisconnectedSession 매개 변수에서만 유효합니다.

이 매개 변수는 PowerShell 3.0에서 도입되었습니다.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

세션에 대한 고급 옵션을 지정합니다. cmdlet을 사용하여 New-PSSessionOption 만든 개체와 같은 SessionOption 개체 또는 키가 세션 옵션 이름이고 값이 세션 옵션 값인 해시 테이블을 입력합니다.

참고 항목

SessionOption에 대한 해시 테이블을 지정하면 PowerShell은 해시 테이블을 System.Management.Autiomation.Remoting.PSSessionOption 개체로 변환합니다. 해시 파일에 지정된 키의 값은 개체의 일치 속성으로 캐스팅됩니다. 호출 New-PSSessionOption과 다르게 동작합니다. 예를 들어 IdleTimeout과 같은 시간 제한 속성에 대한 System.TimeSpan 값은 정수 값을 밀리초 대신 틱으로 변환합니다. PSSessionOption 개체 및 해당 속성에 대한 자세한 내용은 PSSessionOption을 참조하세요.

옵션의 기본값은 설정된 경우 기본 설정 변수의 $PSSessionOption 값에 따라 결정됩니다. 그렇지 않으면 기본값은 세션 구성에 설정된 옵션에 의해 설정됩니다.

세션 옵션 값은 기본 설정 변수 및 세션 구성에서 설정된 세션의 $PSSessionOption 기본값보다 우선합니다. 그러나 세션 구성에 설정된 최대 값, 할당량 또는 제한보다 우선하지 않습니다.

기본값을 포함하는 세션 옵션에 대한 설명은 을 참조하세요 New-PSSessionOption. 기본 설정 변수에 $PSSessionOption 대한 자세한 내용은 about_Preference_Variables 참조하세요. 세션 구성에 대한 자세한 내용은 about_Session_Configurations를 참조하세요.

Type:PSSessionOption
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SSHConnection

이 매개 변수는 각 해시 테이블에 SSH(Secure Shell) 연결을 설정하는 데 필요한 하나 이상의 연결 매개 변수가 포함된 해시 테이블 배열을 사용합니다. SSH커넥트ion 매개 변수는 각 세션에 서로 다른 연결 정보가 필요한 여러 세션을 만드는 데 유용합니다.

해시 테이블의 멤버는 다음과 같습니다.

  • ComputerName (또는 HostName)
  • 포트
  • UserName
  • KeyFilePath (또는 IdentityFilePath)

ComputerName (또는 HostName)은 필요한 유일한 키-값 쌍입니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:Hashtable[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-SSHTransport

SSH(Secure Shell)를 사용하여 원격 연결이 설정되었음을 나타냅니다.

기본적으로 PowerShell은 Windows WinRM을 사용하여 원격 컴퓨터에 연결합니다. 이 스위치는 PowerShell이 SSH 기반 원격 연결을 설정하기 위해 HostName 매개 변수를 사용하도록 강제합니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:SwitchParameter
Accepted values:true
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Subsystem

PSSession에 사용되는 SSH 하위 시스템을 지정합니다.

sshd_config 정의된 대로 대상에 사용할 하위 시스템을 지정합니다. 하위 시스템은 미리 정의된 매개 변수를 사용하여 특정 버전의 PowerShell을 시작합니다. 지정된 하위 시스템이 원격 컴퓨터에 없으면 명령이 실패합니다.

이 매개 변수를 사용하지 않으면 기본값은 하위 시스템입니다 powershell .

Type:String
Position:Named
Default value:powershell
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ThrottleLimit

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

제한 제한은 세션이나 컴퓨터가 아닌 현재 명령에만 적용됩니다.

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UserName

원격 컴퓨터에서 명령을 실행하는 데 사용되는 계정의 사용자 이름을 지정합니다. 사용자 인증 방법은 원격 컴퓨터에서 SSH(Secure Shell)를 구성하는 방법에 따라 달라집니다.

SSH가 기본 암호 인증을 위해 구성된 경우 사용자 암호를 묻는 메시지가 표시됩니다.

키 기반 사용자 인증을 위해 SSH가 구성된 경우 KeyFilePath 매개 변수를 통해 키 파일 경로를 제공할 수 있으며 암호 프롬프트가 발생하지 않습니다. 클라이언트 사용자 키 파일이 SSH 알려진 위치에 있는 경우 키 기반 인증에 KeyFilePath 매개 변수가 필요하지 않으며 사용자 이름에 따라 사용자 인증이 자동으로 수행됩니다. 자세한 내용은 키 기반 사용자 인증에 대한 플랫폼의 SSH 설명서를 참조하세요.

필수 매개 변수가 아닙니다. UserName 매개 변수를 지정하지 않으면 현재 로그온한 사용자 이름이 연결에 사용됩니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseSSL

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

WS-Management는 네트워크를 통해 전송되는 모든 PowerShell 콘텐츠를 암호화합니다. UseSSL 매개 변수는 HTTP 대신 HTTPS를 통해 데이터를 보내는 추가 보호입니다.

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VMId

가상 머신의 ID 배열을 지정합니다.

Type:Guid[]
Aliases:VMGuid
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

가상 머신의 이름 배열을 지정합니다.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

입력

ScriptBlock

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

출력

System.Management.Automation.PSRemotingJob

AsJob 매개 변수를 사용하는 경우 이 cmdlet은 작업 개체를 반환합니다.

PSSession

InDisconnectedSession 매개 변수를 사용하는 경우 이 cmdlet은 PSSession 개체를 반환합니다.

Object

기본적으로 이 cmdlet은 ScriptBlock 매개 변수의 값인 호출된 명령의 출력을 반환합니다.

참고

PowerShell에는 다음 별칭이 포함됩니다.Invoke-Command

  • 모든 플랫폼:
    • icm

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

여러 컴퓨터에서 명령을 실행하면 PowerShell은 목록에 표시되는 순서대로 컴퓨터에 연결합니다. 그러나 명령 출력은 원격 컴퓨터에서 수신되는 순서대로 표시되며, 이는 다를 수 있습니다.

실행되는 명령 Invoke-Command 에서 발생하는 오류는 명령 결과에 포함됩니다. 로컬 명령에서 오류를 종료하는 오류는 원격 명령에서 종료되지 않는 오류로 처리됩니다. 이 전략을 사용하면 한 컴퓨터에서 오류를 종료해도 실행 중인 모든 컴퓨터의 명령이 닫히지 않습니다. 이 방법은 원격 명령이 단일 컴퓨터에서 실행되는 경우에도 사용됩니다.

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

Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>

InDisconnectedSession 매개 변수를 사용하여 PSSession의 연결을 끊으면 세션 상태가 Disconnected이고 가용성이 None입니다. State 속성의 값은 현재 세션을 기준으로 합니다. 연결 끊김은 PSSession현재 세션에 연결되지 않음을 의미합니다. 그러나 PSSession모든 세션에서 연결이 끊어지는 것은 아닙니다. 다른 세션에 연결되어 있을 수도 있습니다. 세션에 연결하거나 다시 연결할 수 있는지 여부를 확인하려면 가용성 속성을 사용합니다.

None의 가용성 값은 세션에 연결할 수 있음을 나타냅니다. 사용값은 PSSession이 다른 세션에 연결되어 있으므로 연결할 수 없음을 나타냅니다. 세션의 State 속성 값에 대한 자세한 내용은 RunspaceState를 참조하세요. 세션의 가용성 속성 값에 대한 자세한 내용은 RunspaceAvailability를 참조하세요.

HostNameSSH커넥트ion 매개 변수는 PowerShell 6.0부터 포함되었습니다. SSH(Secure Shell)를 기반으로 PowerShell 원격을 제공하기 위해 추가되었습니다. PowerShell 및 SSH는 여러 플랫폼(Windows, Linux, macOS)에서 지원되며 PowerShell 및 SSH가 설치 및 구성된 이러한 플랫폼에서 PowerShell 원격 작업이 작동합니다. 이는 WinRM을 기반으로 하는 이전 Windows 전용 원격 기능과는 별개이며 많은 WinRM 특정 기능 및 제한 사항이 적용되지 않습니다. 예를 들어 WinRM 기반 할당량, 세션 옵션, 사용자 지정 엔드포인트 구성 및 연결 끊기/다시 연결 기능은 현재 지원되지 않습니다. PowerShell SSH 원격을 설정하는 방법에 대한 자세한 내용은 SSH를 통해 PowerShell 원격을 참조하세요.

실행 파일은 ssh 다음 순서대로 다음 원본에서 구성 데이터를 가져옵니다.

  1. 명령줄 옵션
  2. 사용자의 구성 파일(~/.ssh/config)
  3. 시스템 전체 구성 파일(/etc/ssh/ssh_config)

다음 cmdlet 매개 변수는 매개 변수 및 옵션에 ssh 매핑됩니다.

Cmdlet 매개 변수 ssh 매개 변수 동등한 ssh -o 옵션
-KeyFilePath -i <KeyFilePath> -o IdentityFile=<KeyFilePath>
-UserName -l <UserName> -o User=<UserName>
-Port -p <Port> -o Port=<Port>
-ComputerName -Subsystem -s <ComputerName> <Subsystem> -o Host=<ComputerName>

매개 변수에 의해 명시적으로 전달된 모든 값이 Options hashtable에 전달된 값보다 우선합니다. 파일에 대한 ssh_config 자세한 내용은 ssh_config(5)를 참조하세요.