我创建了以下脚本,但它只返回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。
感谢关注。
答案 0 :(得分:0)
来自Docs:
bWaitOnReturn
可选。布尔值,指示脚本是否应该等待 程序在继续下一个之前完成执行 脚本中的语句。如果设置为true,则脚本执行将停止,直到 程序完成,Run返回由...返回的任何错误代码 程序。如果设置为false(默认值),则返回Run方法 启动程序后立即自动返回0(不是 被解释为错误代码)。
为了避免因缺少dcdiag或不同版本的findstr或误解/使用这些程序而导致的不必要的问题,我使用“minimal errorlevel setters”:
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参数的重要性。