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]
}
Другие вопросы по тегам