2014-09-19 3 views
0

일부 서버 응용 프로그램 풀을 원격으로 다시 시작하는 작업을 스크립팅하고 있습니다. 다음과 같이 Invoke-Command를 사용하고 있습니다.Powershell Invoke-Command 쿼리

Invoke-Command -ComputerName $server {Restart-WebItem "IIS:\AppPools\DefaultAppPool"} 

이 작업은 정상적으로 작동합니다. 나는 응용 프로그램 풀을 매개 변수화하는 경우 그러나, 나는이 그냥 문법 문제입니다 가정

Unexpected object type. 
Parameter name: pspath 

실패,하지만 난 무엇을 작동 할 수 없습니다

$appPool = "IIS:\AppPools\DefaultAppPool" 
Invoke-Command -ComputerName $server {Restart-WebItem $appPool} 

을 다음과 같이.

답변

1

원격 호스트 $ appPool은 존재하지 않습니다. 당신은 PS의 V3를 사용하는 경우 당신이 using: 키워드로 변수를 앞에 수 있습니다 ->

$appPool = "IIS:\AppPools\DefaultAppPool" 
Invoke-Command -ComputerName $server {Restart-WebItem $using:appPool} 

이전 버전 3에, 당신은

+0

이 우수한 $ 사용하는 구문은 근무 -argumentList 매개 변수를 사용했다. 이상하게도 로컬 변수가 원격으로 실행되기 전에 해결되었다는 인상을 받았습니다. -ArgumentList를 사용하여 동일한 오류 메시지가 나타납니다. –

+0

@KevinRoche 아니요,이 때문에'-argumentlist'가 만들어진 이유는 다음과 같습니다. "명령에서 로컬 변수의 값을 제공합니다. 명령이 원격 컴퓨터에서 실행되기 전에 명령의 변수가이 값으로 대체됩니다." –

+0

방금 ​​-ArgumentList로 몇 가지 테스트를 시도했지만 뭔가 빠졌습니다. 이 함수의 -PSPath 매개 변수는 문자열 배열이므로 원본과 같은 오류 ({Restart-WebItem} -ArgumentList ($ appPool) 및 {Restart-WebItem} -ArgumentList $ appPool을 시도했습니다. 올바른 구문은 무엇입니까? –