2016-07-07 214 views
3

好吧,所以我一直在試圖做一段時間,而且我意識到這不是經常被問到的東西,而隨着vb6越來越逐步淘汰,似乎沒有那麼多幫助比我想要的語言。在vb6中獲取實際的PowerShell返回值?

標題並沒有說實際上,因爲我正在尋找一些非常具體的東西。我需要執行一個shell命令(我知道該怎麼做),但是,在執行它之後,我希望能夠將該命令的返回值保存爲一個字符串。例如,如果命令是ipconfig,我希望獲得該命令的全部返回值,在執行該命令後,我將在PowerShell中看到的所有文本保存到程序中的字符串中。

據我所知,我需要「導入」一些東西,因爲我必須使用WshShell,我不知道從哪裏得到。所以這是問題的一部分,我必須添加哪些類以及如何添加類,或者如果有方法可以在不添加類的情況下更好地完成。另外,我聽說過很多關於使用CreatePipe等類似問題,但我不知道如何使用它。

基本上,我說的是我對這個主題相當沒有教養,任何見解都會非常感謝,並感謝所有回覆的人。

+1

ping通你不需要輸入任何東西爲的WshShell - 只需添加一個引用到Windows腳本宿主。至於shell命令的輸出,我認爲一個想法是將輸出從shell命令輸出到文本文件,等待shell完成,然後讀取文本文件 – dbmitch

回答

2

有很多方法。使用VBScript的WSHShell.Exec是最簡單的。

這是VBScript,但VBScript可以粘貼到VB(但反之亦然)。

Dim WshShell, oExec 
Set WshShell = CreateObject("WScript.Shell") 

Set oExec = WshShell.Exec("ipconfig") 

Do While oExec.Status = 0 
    WScript.Sleep 100 
Loop 
MsgBox oExec.StdOut.ReadAll 

稍微從幫助中修改。

這是如何從VBS/VB

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

Set colItems = objWMIService.ExecQuery("Select * From win32_PingStatus where address='104.43.195.251'") 
'msgbox colItems 
For Each objItem in colItems 
    msgbox "Status" & objItem.statuscode & " Time " & objItem.ResponseTime 
Next 
+0

如果我這樣做,PowerShell會話在此之後關閉完成了?我希望不會,因爲它保持開放很重要。雖然我沒有看到它不應該關閉的理由,但我們永遠無法分辨。 –