【问题标题】:Pipeline script vbs管道脚本 vbs
【发布时间】:2016-07-31 14:09:25
【问题描述】:

我创建了以下脚本,但它只返回 0,甚至在 DNS 测试中发现错误。

Dim consult, objShell

Set objShell = WScript.CreateObject ("WScript.shell")

consult = objShell.run ("dcdiag /test:DNS | findstr /i failed", 0)

If consult = "0" THEN
    WScript.Echo "OK"
else
    WScript.Echo "ERROR"
end If

我知道没有运行 findstr。

感谢关注。

【问题讨论】:

    标签: vbscript


    【解决方案1】:
    • 您没有使用“选项显式”;太鲁莽了。
    • 您不会在 Dims 附近/立即启动;这很容易出错。
    • 您只使用一次变量(objShell);太浪费了。
    • 您在比较中混合了数据类型(整数与字符串);这太愚蠢了。
    • 您没有阅读文档(仔细);这是无礼的。

    来自Docs

    bWaitOnReturn

    可选。指示脚本是否应等待的布尔值 在继续下一个之前完成执行的程序 脚本中的声明。如果设置为 true,脚本执行将暂停,直到 程序完成,并且 Run 返回由 程序。如果设置为 false(默认值),则 Run 方法返回 启动程序后立即自动返回 0(不是 被解释为错误代码)。

    为避免因缺少 dcdiag 或不同版本的 findstr 或对这些程序的误解/使用而导致不必要的问题,我使用“最小错误级别设置器”:

    type ex0.vbs, ex1.vbs
    
    ex0.vbs
    WScript.Quit 0
    
    ex1.vbs
    WScript.Quit 1
    

    还有这段代码:

    Option Explicit
    
    Dim consult : consult = WScript.CreateObject("WScript.Shell").Run("%comspec% /c ex0.vbs | ex1.vbs", 0, True)
    
    If consult = "0" THEN
        WScript.Echo consult, "OK"
    else
        WScript.Echo consult, "ERROR"
    end If
    

    输出:

    cscript 36531325.vbs
    1 ERROR
    

    使用

    .Run("ex0.vbs | ex1.vbs", 0, True)
    

    查看您需要一个 shell (%comspec%) 来使用 shell 的功能 (|) 和

    .Run("%comspec% /c ex0.vbs | ex1.vbs", 0)
    

    为了理解 bWaitOnReturn 参数的重要性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 2012-10-13
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2016-04-10
      相关资源
      最近更新 更多