Есть две проблемы. Во-первых, переменная $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{
write-host "error connecting to $server`: $_"
}
error connecting to doesnotexist: [doesnotexist] Connecting to remote server doesnotexist failed...