Windows 遠端系統管理和 WMI
Windows 遠端系統管理可用來擷取 Windows Management Instrumentation (WMI 和 MI) 公開的資料。 您可以使用使用 WinRM 腳本 API 或 透過 Winrm 命令列工具的腳本或應用程式,取得 WMI 資料。
WinRM 支援大部分熟悉的 WMI 類別和作業,包括内嵌物件。 WinRM 可以利用 WMI 來收集 資源 的相關資料,或管理以 Windows 為基礎的作業系統上的資源。 這表示您可以透過現有的 WMI 類別集合,取得企業中有關磁片、網路介面卡、服務或處理常式等物件的資料。 您也可以存取標準 WMI IPMI 提供者所提供的硬體資料。
識別 WMI 資源
您可以在 WinRM 和 WS-Management 通訊協定中將 WMI 類別當做 資源 參考:一種受控實體,例如服務或磁片。
WMI 類別或方法是由 URI識別,就像使用 WS-Management 通訊協定時的任何其他資源一樣。 URI 可以指定 WMI 資源 (類別) 、WMI 動作 (方法) ,或在透過網路傳送 的訊息 中識別類別的特定實例。 如需詳細資訊,請參閱 資源 URI。
建構 WMI 類別的 URI 前置詞
URI 前置詞包含固定部分和 WMI 命名空間。 例如,Windows Server 中包含前置詞固定部分的 URI 前置詞為: http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>
。 這可讓任何 WMI 命名空間產生 URI 前置詞。 例如,若要存取 root\default WMI 命名空間,請使用下列 URI 前置詞: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/
。
管理的大部分 WMI 類別都位於 root\cimv2 命名空間中。 若要存取 root\cimv2 命名空間中的類別和實例,請使用 URI 前置詞: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
。 如需詳細資訊,請參閱 資源 URI。
產生 WMI 類別的完整 URI
您提供給 Winrm 命令列工具或腳本的 URI 是由前置詞加上資源規格所組成。
下列程式描述如何產生資源 URI 以取得 WMI 類別,或用於列舉作業。
產生 WMI 類別的資源 URI
從前置詞開始,指出應該使用 WS-Management 通訊協定架構。
https://schemas.microsoft.com/wbem/wsman/1
WMI 類別的資源 URI 前置詞一律相同。 如需詳細資訊,請參閱 URI 前置詞。
將 WMI 命名空間新增至前置詞。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
新增類別名稱。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
若要設定屬性的值,或叫用特定方法,請新增 類別的必要索引鍵值或值。
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt
如果您將索引鍵值保留空白,則不會改變原始屬性值。
注意
將索引鍵值保留空白會將屬性值設定為 Null。
使用 WinRM 尋找 WMI 資源
您可以透過命令列工具 Winrm,或透過使用 WinRM 腳本 API的 Visual Basic 腳本來取得 WMI 資料。 您不會使用 WMI 路徑 來尋找資源。 相反地,您會將 WMI 命名空間和階層轉換成 URI。
WMI 類別的 WinRM URI 包含兩個部分: URI 前置 詞和您想要存取的類別。
例如,下列 URI 可以提供給 Session.Enumerate 方法,以列出電腦上的所有服務。 URI 前置詞為 http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
,且 類別 Win32_Service。
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
在 WMI 中,以數種方式列出資源或類別所有實例的資料:
該資源之所有實例的查詢。
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")
呼叫 SWbemServices.InstancesOf 或 SWbemObject.Instances_。
Set colServices = InstancesOf("Win32_Service")
在 WinRM 中,有一種方式可列出資源的所有實例: Session.Enumerate。
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )
尋找 WMI 資源的特定實例
在 WMI 中,您可以指定索引鍵屬性的值,或查詢符合屬性值清單的實例,來指定類別的特定實例。 索引鍵屬性具有 WMI 金鑰限定詞。
您可以透過數種方式取得類別的特定實例:
使用篩選和方言參數呼叫Session.Enumerate以建立查詢。
RemoteComputer = "servername.domain.com" strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL" strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer) strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'" Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
呼叫 SWbemServices.Get。 針對 Session.Get,您必須提供一或多個特定的索引鍵值,前面加上問號 (?) 。
特定實例的 URI 格式為
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value
。strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
WMI 類別可能有一個以上的金鑰。 機碼名稱/值組會以 「+」 符號分隔。 在此情況下,格式為:
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2
。取得單一 WMI 物件的 WinRM 語法與 WMI 不同。 單一是定義的 WMI 類別,因此只允許一個實例。 Win32_CurrentTime 或 Win32_WMISetting 是 WMI 單一類別的範例。
單一的 WMI 語法會顯示在下列 VBScript 程式碼範例中。
Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
下列範例顯示不使用 「@」 的 WinRM 單一語法。
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
將 選取器 新增至 ResourceLocator 或 IWSManResourceLocator 物件。
下列 VBScript 程式碼範例示範如何使用選取器來取得 特定Win32_Processor實例。
strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor" Set objWsman = CreateObject("Wsman.Automation") Set Session = objWsman.CreateSession Set Locator = objWsman.CreateResourceLocator(strUri) Locator.AddSelector "DeviceID", "CPU0"