Попробуйте, ловите в powershell команду вызова

Он не собирается «перехватывать» блок как часть команды вызова для неправильного хоста с использованием powershell.

$server= @("correcthost","Incorrecthost")
foreach($server in $server)
   {

     Try{
          Invoke-Command -ComputerName $server -ArgumentList $server -ScriptBlock    {

             $serverk=$args[0]    
             write-host $serverk
            }
        }
    Catch
       {
        write-host "error connecting to $serverk"
       }
  }

Я ожидаю, что блокировка будет выполнена, поскольку я пытаюсь указать неверный хост

но фактический вывод не печатает блок catch


person Vinodh Elumalai    schedule 07.11.2019    source источник


Ответы (1)


Есть две проблемы. Во-первых, переменная $serverk выходит за рамки в блоке catch. Он используется только на удаленном компьютере, поэтому в локальной системе он не существует и не имеет значения.

Отладка любого скрипта Powershell всегда должна начинаться с включения строгого режима, чтобы генерировались предупреждения о неинициализированных переменных. Вот так,

Set-StrictMode -Version 'latest'
...<code>
The variable '$serverk' cannot be retrieved because it has not been set.
At line:12 char:41
+         write-host "error connecting to $serverk"
+                                         ~~~~~~~~
    + CategoryInfo          : InvalidOperation: (serverk:String) [], RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

Исправить легко, просто обратитесь к $server, это переменная, используемая в итерации $servers.

Вторая проблема вызвана ErrorAction, или, если быть точным, не объявленным. Добавьте -ErrorAction Stop к Invoke-Command и обработайте исключение в блоке catch следующим образом:

catch{
    write-host "error connecting to $server`: $_"
}
error connecting to doesnotexist: [doesnotexist] Connecting to remote server doesnotexist failed...
person vonPryz    schedule 07.11.2019
comment
Я думаю, вы имели в виду -ErrorAction Stop. Насколько я понимаю, continue не пойдет в блок catch. - person Sid; 07.11.2019