SWbemServices 物件
您可以使用 SWbemServices 物件的方法,對本機主機或遠端主機上的命名空間執行作業。 此物件無法由 VBScript CreateObject 呼叫建立。
成員
SWbemServices物件具有下列類型的成員:
方法
SWbemServices物件具有這些方法。
方法 | 描述 |
---|---|
AssociatorsOf | 透過一或多個關聯類別,擷取與指定資源相關聯的受控資源實例。 您提供原始端點的物件路徑, AssociatorsOf 會傳回位於相反端點的 Managed 資源。
AssociatorsOf方法會執行 「ASSOCIATORS OF」 WQL 查詢所執行的相同函式。 |
AssociatorsOfAsync | 以非同步方式傳回與指定物件相關聯之類別或) 實例 (類別或實例的集合。 |
刪除 | 從 CIM 存放庫) 刪除受控資源的實例 (或類別定義。 |
DeleteAsync | 以非同步方式刪除物件路徑中指定的類別或實例。 |
ExecMethod | 提供執行 Managed 資源類別定義所定義方法的替代方式。 主要用於指令碼語言不支援 out 參數的情況。 例如,JScript 不支援 out 參數。 |
ExecMethodAsync | 以非同步方式執行方法提供者所匯出的方法。 |
ExecNotificationQuery | 執行事件訂閱查詢以接收事件。 事件訂閱查詢是一個查詢,可定義您想要監視之受控環境的變更。 發生變更時,WMI 基礎結構會提供描述呼叫腳本變更的事件。 |
ExecNotificationQueryAsync | 以非同步方式執行查詢以接收事件。 |
ExecQuery | 執行查詢來擷取 WMI 管理資源的實例集合, (或類別定義) 。
ExecQuery 可用來擷取符合您在傳遞至 ExecQuery之查詢中定義之準則的已篩選實例集合。 |
ExecQueryAsync | 以非同步方式執行查詢以擷取物件。 |
獲取 | 根據物件路徑擷取受控資源的單一實例 (或類別定義) 。 |
GetAsync | 根據物件路徑,以非同步方式擷取屬於類別定義或實例的物件。 |
InstancesOf | 根據類別名稱擷取受控資源的所有實例。 根據預設, InstancesOf 會執行深層擷取。 也就是說, InstancesOf 會擷取傳遞至 方法之類別名稱所識別的資源實例,也會擷取屬於子類別的所有實例, (定義于目標類別) 底下。 |
InstancesOfAsync | 根據使用者指定的選取準則,以非同步方式傳回指定類別的實例。 |
ReferencesTo | 傳回參考指定資源的所有關聯。 瞭解 ReferencesTo 的最佳方式是將其與 AssociatorsOf 方法進行比較。
AssociatorsOf 會 傳回位於關聯相反端的動態資源。
ReferencesTo 會 傳回關聯本身。
ReferencesTo方法會執行 「REFERENCES OF」 WQL 查詢所執行的相同函式。 |
ReferencesToAsync | 以非同步方式傳回參考特定類別或實例之所有關聯類別或實例的集合。 |
SubclassesOf | 從 CIM 存放庫擷取指定類別的所有子類別。 |
SubclassesOfAsync | 以非同步方式傳回指定類別的子類別集合。 |
屬性
SWbemServices物件具有這些屬性。
屬性 | 存取類型 | 描述 |
---|---|---|
安全_ |
唯讀 |
用來取得或設定 SWbemServices 物件的安全性設定。 |
備註
方法可以在同步模式、非同步模式或半同步模式中呼叫。 如需詳細資訊,請參閱 呼叫方法。
概觀
SWbemServices 提供兩個主要角色。 首先, SWbemServices 物件代表與目的電腦上 WMI 命名空間的已驗證連線。 其次, SWbemServices 是用來擷取 WMI 管理資源的 Automation 物件。 您可以使用下列兩種方式之一取得 SWbemServices 物件的參考:
如到目前為止所呈現的大部分 WMI 腳本所示,您可以使用 VBScript GetObject 函式搭配 WMI Moniker 「winmgmts:」。 下列範例是 WMI 連線的最簡單形式。 此範例會連線到本機電腦上的預設命名空間 (通常是 「Root\CIMv2」) :
Set objSWbemServices = GetObject("winmgmts:")
您也可以使用 SWbemLocator 物件 ConnectServer 方法來取得 SWbemServices 物件的參考。
取得 SWbemServices 物件的參考之後,您可以使用物件參考來呼叫 18 個可使用 SWbemServices的方法。 SWbemServices 可以傳回三個不同的 WMI 腳本程式庫物件之一, (SWbemObjectSet、 SWbemObject或 SWbemEventSource) ,視您呼叫的方法而定。 瞭解每個方法傳回的物件類型可協助您判斷腳本必須採取下一個步驟。 例如,如果您取回 SWbemObjectSet,則必須列舉集合來存取集合中的每個 SWbemObject 。 如果您取回 SWbemObject,您可以立即存取物件方法和屬性,而不需要先列舉集合。
作業模式
SWbemServices 支援三種作業模式:同步、非同步和半同步。
Synchronous: 在同步模式中,您的腳本會封鎖 (暫停) ,直到 SWbemServices 方法完成為止。 您的腳本不僅會等候,也會在 WMI 擷取受控資源的實例的情況下,先在記憶體中建置整個 SWbemObjectSet ,再將第一個位元組的資料傳回呼叫腳本。 這可能會對腳本效能和執行腳本的電腦上造成負面影響。 例如,從 Windows 事件記錄檔同步擷取數千個事件可能需要很長的時間,並使用大量的記憶體。 基於這些原因,不建議使用同步作業,除了預設同步的三種方法 (Delete、 ExecMethod和 Get) 。 這些方法不會傳回大型資料集,因此不需要半同步處理作業。
非同步: 在非同步模式中,您的腳本會呼叫九個非同步方法的其中一個,並立即傳回。 也就是說,只要呼叫非同步方法,腳本就會繼續執行下一行程式碼。 若要使用非同步方法,您的腳本必須先建立 SWbemSink 物件和稱為事件處理常式的特殊副程式。 WMI 會執行非同步作業,並在作業完成時呼叫事件處理常式副程式來通知腳本。
半synchronous。 半非同步模式是同步和非同步之間的危害。 半同步作業提供比同步作業更好的效能,但不需要額外的知識及腳本步驟來處理非同步作業。 這是大部分 WMI 查詢的預設作業類型。
在半非同步模式中,您的腳本會呼叫六個數據擷取方法之一,並立即傳回。 WMI 會在腳本繼續執行時,擷取背景中的受控資源。 擷取資源時,會透過 SWbemObjectSet 立即傳回腳本。 您可以開始存取 Managed 資源,而不需要等待整個集合組合。
當您使用具有許多實例的受控資源時, (許多意義大於 1,000 個) ,例如 CIM_DataFile 和 Win32_NTLogEvent時,需要注意半同步作業。 注意是 WMI 如何處理受控資源實例的結果。 針對受控資源的每個實例,WMI 會建立並快取 SWbemObject 物件。 當受控資源存在大量的實例時,實例擷取可能會獨佔可用的資源,以減少腳本和電腦的效能。
若要解決此問題,您可以使用 wbemFlagForwardOnly 旗標優化半同步方法呼叫。 wbemFlagForwardOnly旗標與wbemFlagReturnImmediately旗標結合, (預設的半同步旗標) ,告知 WMI 傳回順向SWbemObjectSet,以消除大型資料集效能問題。 不過,使用 wbemFlagForwardOnly 旗標隨附成本。 只能列舉一次順向 SWbemObjectSet 。 存取順向 SWbemObjectSet 中的每個 SWbemObject 之後,就會釋放配置給實例的記憶體。
除了 Delete、 ExecMethod、 Get和九個非同步方法之外,半非同步是預設和建議的作業模式。
常用的方法
系統管理腳本最常使用的方法包括 InstancesOf、 ExecQuery、 Get和 ExecNotificationQuery。 雖然經常使用 ,但 InstancesOf 不一定是擷取資訊的建議方式 (,雖然它是最簡單的) 方式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows Vista |
最低支援的伺服器 |
Windows Server 2008 |
標頭 |
|
類型程式庫 |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |