gpt4 book ai didi

powershell - invoke-expression 不会在 powershell 中抛出错误

转载 作者:行者123 更新时间:2023-12-02 23:27:24 25 4
gpt4 key购买 nike

我正在创建自定义表单并使用 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 中给出的注释,这肯定会引发错误并且它不会创建表单。

因此,当我对我的 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

输出:

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
}

输出:

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

关于powershell - invoke-expression 不会在 powershell 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com