共用方式為


使用 VBScript 連線到 WMI

WMI 腳本可以壓縮C++程式中所需的許多步驟。 它們可以透過 SWbemLocator 物件連線到 WMI,也可以透過名稱標識符 “winmgmts:” 連線。 Moniker 是用來標識 WMI 中命名空間、類別或實例的簡短名稱。 名稱 “winmgmts” 是 WMI 別名,會告訴 Windows 腳本主機使用 WMI 物件、連接到預設命名空間,並取得 SWbemServices 物件。 其他連接資訊,例如模擬層級或特定類別或實例,會出現在指示符名稱後的字串中。 您可以在建立或取得 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\SOFTWARE\Microsoft\WBEM\Scripting\預設命名空間

    默認命名空間為 \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 擷取物件。

若要連線到 WMI,並使用Moniker 擷取物件

  1. 使用輸入參數中的名稱呼叫 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
    

    在上一個範例中,模擬或impersonationLevel=3是默認進程安全性層級。 在下列範例中,除非您需要將進程安全性變更為 委派,否則不需要指定此進程安全性層級。 如需詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級

在 WMI 中撰寫 腳本