2014-09-19 3 views
0

Я занимаюсь созданием задачи для удаленного перезапуска некоторых пулов приложений сервера. Я использую Invoke-Command следующим образом:Запрос командной строки Powershell

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

и это работает нормально; Однако, если я параметризировать приложение бассейн следующим

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

он терпит неудачу с

Unexpected object type. 
Parameter name: pspath 

Я предполагаю, что это только вопрос синтаксиса, но я не могу работать, что.

ответ

1

на удаленном хосте $ appPool не существует. Если вы используете PS V3 вы можете префикс переменного с using: ключевым словом ->

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

до версии 3, вы должны были использовать параметр -argumentList

+0

превосходна $ с помощью синтаксиса работал. Странно, что у меня создалось впечатление, что локальная переменная была разрешена до того, как команда будет удаленно выполнена. Я получал то же сообщение об ошибке, используя -ArgumentList. –

+0

@KevinRoche nope, поэтому '-argumentlist' создан для:« Поставляет значения локальных переменных в команду. Переменные в команде заменяются этими значениями до того, как команда запускается на удаленном компьютере ». –

+0

Просто попробовал несколько тестов с -ArgumentList, но я что-то упустил. Параметр -PSPath для этой функции представляет собой строковый массив, поэтому я попробовал {Restart-WebItem} -ArgumentList (, $ appPool), а также {Restart-WebItem} -ArgumentList $ appPool - ту же ошибку, что и оригинал. Какой правильный синтаксис? –

Смежные вопросы