프로그래밍/PowerShell

Powershell Remote 변수 실행

로멘틱가이 2015. 6. 8. 19:17

오늘은 Powershell Remote 실행 관련하여 매개변수를 받는 경우 생기는 이슈에 대해 이야기 해보겠습니다.

 

예를 들어 A서버에서 B서버로 Remote PowerShell 명령어를 사용하여 붙는 경우에는 일반적으로 Invoke-Command를 사용합니다.

Invoke-Command는 ScriptBlock 명령어를 지정한 서버에 실행하게 됩니다.

ScriptBlock의 경우 일반적으로 다음 양식을 따릅니다.

{ "명령어" }

 

그런데 원격지 서버로 명령어를 수행할때 변수가 사용되는 경우 이슈가 생깁니다.

Invoke-Command 명령어의 경우 Remote 세션을 새로 만들기 때문에 기존에 가지고 있는 Local 세션과 다른 세션이 만들어지므로 변수 값을 인식을 못합니다.

 

예를 들어

$sb=123

 

Invoke-Command { Get-ChildItem $sb } -ComputerName B

 

위와 같은 명령어가 있는 경우

ComputerName B와 연결된 세션에서는 $sb 변수를 인지하지 못하게 됩니다.

 

그래서 로컬 변수를 원격의 변수로 넣어주기 위해서는 다음과 같은 작업을 진행합니다.

 

$d = "C:\Test"

$sb = { Get-ChildItem "$using:d" }

 

Invoke-Command -ScriptBlock $sb -ComputerName B

 

여기서 using이 로컬 변수를 원격의 새로 생긴 세션에 변수를 가져오는 역할을 합니다.

 

해당 서버에 호스트네임으로 접속하는 경우에 이슈가 없으나 IP로 접근하는경우

winrm s winrm/config/client '@{TrustedHosts="서버 아이피"}'

를 입력해야합니다.

모든 원격 서버를 승인하기 위해서는 서버 아이피 대신 Remote Computer를 입력합니다.