PowerShell Remoting - команда Invoke не возвращает результат
Я выполняю следующую команду удаленно из PowerShell в режиме администратора. Это получает статус пула приложений (в IIS) с удаленного компьютера.
$result = Invoke-Command -ComputerName $servername -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName | select value
Если я передаю правильные значения, я получаю правильные данные в $result
но если я передаю неверное имя сервера, я получаю ошибку ниже.
"Не удалось подключиться к удаленному серверу со следующим сообщением об ошибке: WinRM не может обработать запрос".
Проблема в том, что я ничего не получаю в $result
и даже это не собирается ловить блок. Невозможно определить, была ли команда выполнена успешно или нет.
Пожалуйста, предоставьте любые указатели о том, как получить вывод команды в $result.
Примечание: я являюсь администратором на удаленной машине, и WinRM включен.
2 ответа
Чтобы поймать ошибку, она должна быть завершена. Вы можете заставить это с -ErrorAction Stop
,
try {
$result = Invoke-Command -ComputerName $servername -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName -ErrorAction Stop | select value
}
catch {
$result = [pscustomobject]@{"value"="Not Found"}
}
Поймай ошибку с помощью try/catch, добавив -ErrorAction Stop
и отобразить последнюю ошибку с $error[0]
Try{
$result = Invoke-Command -ComputerName $servername -ErrorAction Stop -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName | Select-Object value
}
Catch{
$result = $error[0]
}