2016-04-10 76 views
1

我創建了以下腳本,但它只返回0,甚至在DNS測試中發現錯誤。流水線腳本vbs

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
  • 您不使用「Option Explicit」;這是魯莽的。
  • 你不會在你的Dims附近/剛剛初始化;這很容易出錯。
  • 您只使用變量(objShell)一次;這是浪費。
  • 在比較中混合使用數據類型(整數與字符串);這很愚蠢。
  • 您不仔細閱讀文檔(仔細);這是無禮的。

Docs

bWaitOnReturn

可選。布爾值,指示在腳本中繼續執行下一個 語句之前,腳本是否應該等待 程序完成執行。如果設置爲true,腳本執行將暫停,直到程序完成 ,並且Run返回 程序返回的任何錯誤代碼。如果設置爲false(默認值),則在啓動程序後立即返回 ,並自動返回0(不是 將被解釋爲錯誤代碼)。

爲了避免因丟失的dcdiag或不同版本FINDSTR或錯誤理解/使用這些程序的不必要的問題,我用「最小ERRORLEVEL二傳手」:

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) 

地看到,你需要一個殼(%COMSPEC%)使用shell的功能(|)和

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

爲understandig的bWaitOnReturn參數的重要性。