2010-10-14 65 views
6

我有一個HTA內的VBScript正從本地WMI調用ping狀態。我也有一個函數來獲取遠程PC的最後重啓時間..憑據傳遞到WMI調用在VBScript

Function GetReboot(strComputer) 
    Set objWMIService = GetObject _ 
     ("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colOperatingSystems = objWMIService.ExecQuery _ 
     ("Select * from Win32_OperatingSystem") 
    For Each objOS in colOperatingSystems 
     dtmBootup = objOS.LastBootUpTime 
     dtmLastBootupTime = WMIDateStringToDate(dtmBootup) 
     dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) 
     Wscript.Echo dtmSystemUptime 
    Next 
    GetReboot = dtmLastbootupTime 
End Function 

這大致是什麼,顯然我聲明的變量,並有另一個日期功能等。

這工作,如果我WMI調用「本地主機」,因爲我是本地管理員..但是,當進行WMI調用遠程服務器這隻有在我使用AD管理員帳戶登錄到本地計算機時纔有效。

有沒有一種方法可以提示用戶輸入用戶名和密碼,然後將其傳遞給WMI調用,這樣就可以像任何人一樣使用管理員詳細信息?

回答

7

看起來像SWbemLocator.ConnectServer方法允許您在連接到遠程計算機時指定用戶名和密碼。它看起來像你需要使用類似的語法,你只需要以不同方式創建objWMIService對象:如果你搜索「WbemScripting.SWbemLocator」在谷歌

+0

嗨Kragen,謝謝你的迴應,你能如果能告訴我調試這個?我已經實現了這個到我的代碼,我沒有得到任何錯誤..但是我仍然沒有得到一個響應,並因此拒絕訪問。如果我以管理員帳戶登錄時運行它,它可以正常工作...... – medoix 2010-10-15 04:48:17

+0

@medoix - 如果您啓用了腳本調試功能,那麼您應該可以在函數的前面放置一個'Stop'聲明來強制一個斷點。 – Justin 2010-10-15 07:16:14

0

由於

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Set objWMIService = objSWbemLocator.ConnectServer("MachineName", "root\cimv2", "Username", "Password") 

更多文檔可用一個域管理員,您將能夠爲您的賬戶添加額外的權利,這將允許您像其他任何用戶一樣啓動流程。 AD中的這一權利被稱爲「允許用戶爲委派信任」。它非常強大。這是以另一個用戶身份運行任務的唯一合法方式。看到這個鏈接來設置正確:

http://support.microsoft.com/kb/932455