WMI 工作:連線到 WMI 服務

若要從本機電腦或遠端電腦上從 WMI 取得資料,您必須連線到特定 命名空間以連線到 WMI 服務。 在大部分情況下,請使用速記 Moniker 連線或 定位器 連線。 如需其他範例,請參閱 位於 https://www.microsoft.com/technet 的 TechNet ScriptCenter。

遠端連線需要 Windows 防火牆和 DCOM 的適當設定。 如需詳細資訊,請參閱 連線到遠端電腦上的 WMI透過 Windows 防火牆連線。 從 Windows Vista 開始,使用者帳戶控制 (UAC) 可能會影響 WMI 存取。 如需詳細資訊,請參閱 使用者帳戶控制和 WMI

本主題中顯示的腳本範例只會從本機電腦取得資料。 如需如何使用腳本從遠端電腦取得資料的詳細資訊,請參閱 連線到遠端電腦上的 WMI

下列程式描述如何執行腳本。

執行指令碼

  1. 複製程式碼,並將它儲存在副檔名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將.txt副檔名新增至檔案。
  2. 開啟命令提示字元視窗,並流覽至您儲存檔案的目錄。
  3. 在命令提示字元中 輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否正在從提升許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者存取控制 (UAC) 的保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示腳本的輸出。 因為 WMI 腳本可能會產生大量的輸出,所以您可能會想要將輸出重新導向至檔案。 在命令提示 字元 > 輸入 cscript filename.vbs outfile.txt ,將 filename.vbs 腳本的輸出重新導向至 outfile.txt

下表列出可用來從本機電腦取得各種資料類型的腳本範例。

如何… WMI 類別或方法
...使用 WMI 連線到遠端電腦嗎? 指定下列其中一項作為 Moniker 連接字串的一部分:
  • NetBIOS 電腦名稱稱,例如 「atl-dc-01」
  • 完整功能變數名稱,例如 「atl-dc-01.fabrikam.com」
  • IPv4 位址,例如 「192.168.1.1」
  • 從 Windows Vista 開始,如果目的電腦和建立連線的電腦同時執行 IPv6,您可以指定 IPv6 位址。
如需詳細資訊,請參閱 連線到遠端電腦上的 WMIWMI 中的 IPv6 和 IPv4 支援
VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
strComputer = "atl-dc-01"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" | format-list -Property Name
...在替代認證下執行 WMI 腳本?

在 C++ 中使用 SWbemLocator.ConnectServer 方法或 IWbemLocator::ConnectServer ,並包含適當的使用者名稱和密碼。 連線到本機電腦時,您無法變更認證。 如需詳細資訊,請參閱在遠端電腦上 建立 WMI 腳本連線至 WMI

VB
strComputer = "atl-dc-01"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer (strComputer, "root\cimv2", "fabrikam\administrator", "password")
Set colProcessList = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
PowerShell
$StrComputer = "atl-dc-01"
$strCredentials = "FABRIKAM\administrator"
Get-WmiObject -Class Win32_Process -ComputerName $strComputer -Namespace "root\cimv2" -credential $strCredentials `
   -Impersonation Impersonate | format-list -Property Name

腳本和應用程式的 WMI 工作

WMI C++ 應用程式範例

TechNet ScriptCenter

`