尝试,在 powershell invoke-command 中捕获
Try, catch in powershell invoke-command
它不会 "catch" 阻止使用 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"
}
}
我希望在尝试输入不正确的主机时执行 catchblock
但实际输出的不是 catch 块
有两个问题。首先,变量 $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...
它不会 "catch" 阻止使用 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"
}
}
我希望在尝试输入不正确的主机时执行 catchblock
但实际输出的不是 catch 块
有两个问题。首先,变量 $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...