about_Remote
about_Remote
여러 대의 컴퓨터를 한 번에 관리해야 할 때, 매번 자리에서 일어나 원격 컴퓨터로 옮겨가서 명령을 입력하고 계시나요? PowerShell의 원격 기능(remoting)을 쓰면 그럴 필요가 없어요. 이 문서에서는 원격 컴퓨터에서 명령을 실행하는 방법을, 임시 연결과 지속 연결(세션)이라는 두 가지 큰 흐름으로 나누어 설명해 드릴게요.
본문
간단한 설명
PowerShell에서 원격 명령을 실행하는 방법을 설명합니다.
자세한 설명
원격 명령은 임시 연결이나 지속 연결(persistent connection) 중 하나를 골라, 한 대 또는 여러 대의 원격 컴퓨터에서 실행할 수 있어요. 원격 컴퓨터 한 대와 대화형 세션(interactive session) 을 시작하는 것도 가능합니다.
참고
PowerShell 원격 기능을 쓰려면 로컬 컴퓨터와 원격 컴퓨터 모두 원격 처리가 가능하도록 미리 구성해 두어야 해요. 자세한 내용은 about_Remote_Requirements를 참고하세요.
대화형 세션 시작하기
원격 명령을 실행하는 가장 쉬운 방법은 원격 컴퓨터와 대화형 세션을 시작하는 거예요.
세션이 시작되면, 입력하는 명령은 마치 그 원격 컴퓨터 앞에 앉아 직접 타이핑한 것처럼 원격 컴퓨터에서 실행됩니다. 대화형 세션에서는 한 대의 컴퓨터에만 연결할 수 있어요.
대화형 세션을 시작하려면 Enter-PSSession cmdlet을 사용합니다. 다음 명령은 Server01 컴퓨터와 대화형 세션을 시작해요:
Enter-PSSession Server01
세션이 시작되면 PowerShell은 명령 프롬프트에 원격 컴퓨터 이름을 포함시켜 표시해요:
Server01\PS>
이제 Server01 컴퓨터에서 명령을 입력하면 됩니다.
대화형 세션을 끝내려면 다음을 입력하세요:
Exit-PSSession
자세한 내용은 Enter-PSSession을 참고하세요.
원격 명령 실행하기
원격 컴퓨터에서 다른 명령을 실행할 때는 Invoke-Command cmdlet을 사용합니다.
단일 명령이나 서로 관련 없는 몇 개의 명령을 실행할 때는 Invoke-Command의 ComputerName 매개 변수로 원격 컴퓨터를 지정하고, ScriptBlock 매개 변수로 명령을 지정하면 돼요.
예를 들어 다음 명령은 Server01 컴퓨터에서 Get-Culture 명령을 실행합니다:
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}
지속 연결 만들기
Invoke-Command cmdlet의 ComputerName 매개 변수를 사용하면, PowerShell은 원격 컴퓨터와 임시 연결을 맺어요. 명령이 끝나면 연결은 닫히고, 그 임시 세션 안에서 정의한 변수나 함수는 모두 사라져 버립니다.
원격 컴퓨터와 지속 연결을 만들고 싶을 때는 New-PSSession cmdlet을 사용하세요. 예를 들어 다음 명령은 Server01과 Server02 컴퓨터에 PSSession을 만들고, 그 세션들을 $s 변수에 저장합니다:
$s = New-PSSession -ComputerName Server01, Server02
PSSession에서 명령 실행하기
PSSession이 있으면 함수, 별칭(alias), 변수 값처럼 데이터를 공유하는 일련의 원격 명령을 실행할 수 있어요. PSSession에서 명령을 실행할 때는 Invoke-Command의 Session 매개 변수를 사용합니다.
예를 들어 다음 명령은 Invoke-Command cmdlet으로 Server01과 Server02 컴퓨터의 PSSession에서 Get-Process 명령을 실행해요. 이 명령은 각 PSSession 안에서 프로세스를 $p 변수에 저장합니다:
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}
PSSession이 지속 연결을 사용하기 때문에, 같은 PSSession에서 $p 변수를 쓰는 다른 명령을 이어서 실행할 수 있어요. 다음 명령은 $p에 저장된 프로세스의 개수를 세어 줍니다:
Invoke-Command -Session $s -ScriptBlock {$p.Count}
여러 대의 컴퓨터에서 원격 명령 실행하기
여러 대의 컴퓨터에서 원격 명령을 실행하려면 Invoke-Command의 ComputerName 매개 변수 값에 모든 컴퓨터 이름을 콤마로 구분해 나열하면 됩니다.
예를 들어 다음 명령은 세 대의 컴퓨터에서 Get-Culture 명령을 실행해요:
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}
여러 PSSession에서 명령을 실행할 수도 있어요. 다음 명령은 Server01, Server02, Server03 컴퓨터에 PSSession을 만든 뒤, 각 PSSession에서 Get-Culture 명령을 실행합니다:
$s = New-PSSession -ComputerName S1, S2, S3
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
컴퓨터 목록에 로컬 컴퓨터를 포함하려면 로컬 컴퓨터의 이름을 입력하거나, 점(.) 또는 localhost를 입력하면 돼요:
Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}
원격 컴퓨터에서 스크립트 실행하기
원격 컴퓨터에서 로컬 스크립트를 실행하려면 Invoke-Command의 FilePath 매개 변수를 사용하세요. 파일을 따로 복사할 필요는 없어요. 예를 들어 다음 명령은 S1과 S2 컴퓨터에서 Sample.ps1 스크립트를 실행합니다:
Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1
PowerShell은 스크립트의 결과를 로컬 컴퓨터로 돌려줍니다.
원격 명령 중지하기
명령을 중단하려면 Ctrl+c를 누르세요. PowerShell은 중단 요청을 원격 컴퓨터로 전달하고, 그곳에서 원격 명령이 종료됩니다.
더 알아보기
- 원격 처리의 시스템 요구 사항 — about_Remote_Requirements
- 원격 출력 형식을 다루는 도움말 — about_Remote_Output
- 원격 처리의 동작 방식, 원격 데이터 관리, 특수 구성, 보안 문제, 기타 자주 묻는 질문 — PowerShell Remoting FAQ
- 원격 오류 해결을 위한 도움말 — about_Remote_Troubleshooting
- PSSession과 지속 연결 — about_PSSessions
- PowerShell 백그라운드 작업(background job) — about_Jobs
- 관련 항목: about_Remote_Disconnected_Sessions, about_Remote_Variables, Invoke-Command, Enter-PSSession, New-PSSession