invoke-expression 不会在 powershell 中引发错误

2024-02-26

我正在创建自定义表单,并使用 forms.vbs 将其添加到打印机服务器属性中,并通过 cmd 运行它。脚本如下

cscript 'C:\Tools\forms.vbs' -a -n "DD" -u inches -h 7.48 -w 7.48 -t 0 -e 0 -b 7.48 -r 7.48

在命令提示符下运行时,这可以正常工作。

现在我将这段代码调用到powershell,如下所示,它也工作得很好

  $formname = "DD"
  $cmd = "cscript 'C:\Tools\forms.vbs' -a -n " + '"' + $formname + '"' + " -u inches -h 7.48 -w 7.48 -t 0 -e 0 -b 7.48 -r 7.48 "
  Invoke-Expression  $cmd 

当我考虑检查 powershell 调用表达式的错误处理时,问题就开始了。

在 cmd 中,当我们给出表达式为

cscript 'C:\Tools\forms.vbs' -a -n "DD" -u inches -h 7.48 -w 7.48 -t 0 -e 0 -b 0 -r 0

根据中给出的注释,这肯定会引发错误form.vbs http://www.seascapesailing.com/tools/_resource%20kit%20tools/Windows%20Resource%20Kits/Tools/forms.vbs并且它不会创建表单。

因此,当我向 powershell 调用相同的引发错误的脚本时,表单不会创建,也不会引发任何错误。所以请我在这方面给予指导。提前致谢。


Invoke-Expression 仅检查是否可以运行该命令。例如,如果找不到 cscript.exe,Invoke-Expression 将抛出 ObjectNotFound 异常。

它不检查命令的退出代码或以任何方式解析其输出。不过,您应该能够看到输出。

确保不要在表达式中混合使用单引号和双引号:

$formname = "DD"
# Note double quotes around C:\Tools\forms.vbs
$cmd = 'cscript "C:\Tools\forms.vbs" -a -n ' + '"' + $formname + '"' `
    + ' -u inches -h 7.48 -w 7.48 -t 0 -e 0 -b 7.48 -r 7.48 '
Invoke-Expression $cmd

Output:

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

Unable to add form DD, error code: 0x1A8. Object required

如果您希望代码抛出异常,则需要手动解析输出,例如:

try {
    $output = Invoke-Expression $cmd 
    if ($output -like "*error code*") { throw $output }
}
catch [System.Exception] {
    $message = ($Error[0].Exception -split [System.Environment]::NewLine)[-1]
    $message
}

Output:

Unable to add form DD, error code: 0x1A8. Object required
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

invoke-expression 不会在 powershell 中引发错误 的相关文章

随机推荐