使用 VBScript 連線至 WMI

WMI 腳本可以壓縮 C++ 程式所需的許多步驟。 它們可以透過 SWbemLocator 物件連線到 WMI,也可以透過 Moniker 「winmgmts:」。 Moniker 是一個簡短名稱,可找出 WMI 中的命名空間、類別或實例。 名稱 「winmgmts:」 是 WMI Moniker,告知 Windows 腳本主機使用 WMI 物件、連接到預設命名空間,並取得 SWbemServices 物件。 其他連接資訊,例如模擬層級或特定類別或實例,會出現在 Moniker 名稱後面的字串中。 您可以在建立或取得 WMI 物件的呼叫中使用 Moniker。 如需詳細資訊,請參閱 建構 Moniker 字串

下列程式描述如何使用 SWbemLocator連線到 WMI。

使用 SWbemLocator 連線到 WMI

  1. 使用呼叫 CreateObject來擷取定位器物件。

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. 使用 ConnectServer 方法的呼叫登入命名空間。

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    如果您未在 ConnectServer呼叫中指定電腦,則 WMI 會連線到本機電腦。 如果您未指定命名空間,則 WMI 會連線到登錄機碼中指定的命名空間。

    \ HKEY_LOCAL_MACHINE軟體\微軟\WBEM\腳本\預設命名空間

    預設命名空間為 \root\cimv2。 如需命名空間的詳細資訊,請參閱 在 WMI 中建立階層

  3. 使用對 SWbemServices.Security_ 方法的呼叫來設定模擬層級。

    objService.Security_.ImpersonationLevel = 3 
    

    如需詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級

  4. 實作腳本的目的。

    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 並擷取物件

  1. 使用輸入參數中的 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 實例

  2. 您也可以選擇擷取 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 設定預設進程安全性層級

WMI 中的腳本