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

标签 powershell

我正在创建自定义表单并使用 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/

相关文章:

arrays - Powershell 阵列未清除

将文件夹中所有文件的格式从 Unicode 更改为 ANSI 的 Powershell 脚本

powershell - 如何使用 Get-ChildItem 返回没有扩展名的文件?

PowerShell 配置文件不安全?

powershell - 如何在 PowerShell 中检索 IIS 网站的 SSL 证书

powershell - 排序对象名称未返回预期的顺序

internet-explorer - 从 PowerShell 启动时如何正确关闭 Internet Explorer?

powershell - 如何在powershell中列出所有已安装、可运行的cmdlet?

visual-studio - 是否可以在 Developer Powershell 终端中更改字体?

powershell - Azure 门户中缺少事件订阅