使用 VBScript 連線至 WMI
WMI 腳本可以壓縮 C++ 程式所需的許多步驟。 它們可以透過 SWbemLocator 物件連線到 WMI,也可以透過 Moniker 「winmgmts:」。 Moniker 是一個簡短名稱,可找出 WMI 中的命名空間、類別或實例。 名稱 「winmgmts:」 是 WMI Moniker,告知 Windows 腳本主機使用 WMI 物件、連接到預設命名空間,並取得 SWbemServices 物件。 其他連接資訊,例如模擬層級或特定類別或實例,會出現在 Moniker 名稱後面的字串中。 您可以在建立或取得 WMI 物件的呼叫中使用 Moniker。 如需詳細資訊,請參閱 建構 Moniker 字串。
下列程式描述如何使用 SWbemLocator連線到 WMI。
使用 SWbemLocator 連線到 WMI
使用呼叫 CreateObject來擷取定位器物件。
Set Locator = CreateObject("WbemScripting.SWbemLocator")
使用 ConnectServer 方法的呼叫登入命名空間。
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2")
如果您未在 ConnectServer呼叫中指定電腦,則 WMI 會連線到本機電腦。 如果您未指定命名空間,則 WMI 會連線到登錄機碼中指定的命名空間。
\ HKEY_LOCAL_MACHINE軟體\微軟\WBEM\腳本\預設命名空間
預設命名空間為 \root\cimv2。 如需命名空間的詳細資訊,請參閱 在 WMI 中建立階層。
使用對 SWbemServices.Security_ 方法的呼叫來設定模擬層級。
objService.Security_.ImpersonationLevel = 3
如需詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級。
實作腳本的目的。
WMI 會公開各種腳本物件,這些物件會用來存取及操作整個網路的資料。 如需詳細資訊,請參閱 操作類別和實例資訊和WMI 的腳本 API。
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2") objService.Security_.ImpersonationLevel = 3 Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob") i=0 For each Job in Jobs i = i+1 WScript.Echo Job.JobId & " " & Job.Command & VBNewLine Next If i = 0 Then WScript.Echo "No Jobs Scheduled with the AT command were found" End If
下列程式說明如何連線到 WMI,並使用 Moniker 擷取物件。
使用 Moniker 連接到 WMI 並擷取物件
使用輸入參數中的 Moniker 呼叫 GetObject 。
'the simple version Set MyObject = GetObject("winMgmts::Win32_scheduledJob") 'Or the more complex version strComputer = "." Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
moiniker 包含數個元素,可用來連線到 WMI:
「winmgmts:」 會告訴 WSH 使用 腳本 API 物件。 在此特定範例中,WSH 會知道它應該傳回 SWbemObject,描述系統上第一個Win32_scheduledJob。 其他可能傳回的物件會是 SWbemCollection 或 SWbemServices 物件,視 Moniker 所描述的內容而定。
您可以選擇性地設定連線的安全性層級。 不過,請注意,您無法在 Moniker 中設定名稱和密碼資訊。 如需詳細資訊,請參閱 保護腳本用戶端。
您可以選擇性地定義 WMI 物件的路徑。 這包括本機或遠端電腦、命名空間,以及 類別的名稱。 如需在 WMI 腳本中使用 VBScript GetObject 的詳細資訊,請參閱 建立實例 和 擷取 WMI 實例。
您也可以選擇擷取 SWbemServices 物件 (,而不是擷取單一專案或集合,如上一個範例) 中所述。 之後,您就可以在傳回的物件上呼叫其他查詢。
strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob") For Each objJob in colScheduledJobs Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine Next
在上述範例中,impersonate 或 impersonationLevel=3 是預設進程安全性層級。 在下列範例中,除非您需要將進程安全性變更為 委派,否則不需要指定此進程安全性層級。 如需詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級。