WMI 腳本可以壓縮C++程式中所需的許多步驟。 它們可以透過 SWbemLocator 物件連線到 WMI,也可以透過名稱標識符 “winmgmts:” 連線。 Moniker 是用來標識 WMI 中命名空間、類別或實例的簡短名稱。 名稱 “winmgmts” 是 WMI 別名,會告訴 Windows 腳本主機使用 WMI 物件、連接到預設命名空間,並取得 SWbemServices 物件。 其他連接資訊,例如模擬層級或特定類別或實例,會出現在指示符名稱後的字串中。 您可以在建立或取得 WMI 物件的呼叫中使用 Moniker。 如需詳細資訊,請參閱 建構 Moniker 字串。
下列程式描述如何使用 SWbemLocator連線到 WMI。
使用 SWbemLocator 連線到 WMI
-
Set Locator = CreateObject("WbemScripting.SWbemLocator")
使用呼叫 ConnectServer 方法來登入命名空間。
Set objLocator = CreateObject("WbemScripting.SWbemLocator") Set objService = objLocator.ConnectServer(".", "root\cimv2")
如果您未在呼叫 ConnectServer中指定計算機,則 WMI 會連線到本機電腦。 如果您未指定命名空間,則 WMI 會連線到登錄機碼中指定的命名空間。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\預設命名空間
使用對 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 擷取物件。
若要連線到 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
在上一個範例中,模擬或impersonationLevel=3是默認進程安全性層級。 在下列範例中,除非您需要將進程安全性變更為 委派,否則不需要指定此進程安全性層級。 如需詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級。
相關主題
-
在 WMI 中撰寫 腳本