powershell - 如何在远程脚本块中使用错误,以便调用范围看不到它

powershell - how can I consume an error in remote script block so calling scope doesnt see it

提问人:Keith 提问时间:6/9/2022 更新时间:6/13/2022 访问量:48

问:

我在服务器上有一个 ps 脚本,它使用 invoke-command 调用其域上的各种服务器/客户端,并通过它在被调用计算机上使用的 COM 对象传递脚本以远程运行某些作业。 在其中一台服务器上,由于那里的作业原来是本地作业,因此当实例化 com 对象时,它没有属性 myComObject.NetworkUser。

代码就是这样有效的

$NetworkUser = $comobject.NetworkUser

如果作业位于本地有效运行的服务器上,则会出现错误

“在此对象上找不到属性'NetworkUser'。验证该属性是否存在”

然后,这最终会返回到调用脚本范围并注册为错误。

我试图通过事先检查NetworkUser属性是否存在来阻止错误

if($null -eq $comobject.NetworkUser)
{
 #dont try and assign it to anything
}
else
{
    #use the value and go ahead and do the job
}

但这仍然会引发错误。

如果 NetworkUser 属性不存在,我只想退出远程调用的脚本(因为不需要运行作业)并返回到调用范围,而不会显示/传回任何错误。

我该怎么做?

非常感谢

PowerShell 错误处理 脚本块

评论

1赞 An-dir 6/9/2022
您是否尝试捕获错误:learn.microsoft.com/en-us/powershell/module/...
0赞 zett42 6/9/2022
也许有帮助:stackoverflow.com/a/48143880/7571258

答:

0赞 Albus Şeyda Eren 6/9/2022 #1

您是否将变量传递给远程服务器?这似乎是这里的原因。

评论

0赞 Community 6/10/2022
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Keith 6/13/2022 #2

最后,我找到了一种不出现错误的方法,即在调用属性之前使用此样式检查属性是否存在

    $myComObject= New-Object -ComObject 'comObjectofInterest'
    if([bool]($myComObject.PSobject.Properties.Name -match 'NetworkUser))
    {
        #Use the property
    }