使用 VBScript 從遠端連線到 WMI

您可以建立連線物件,以使用 VBScript 建立 WMI 的遠端連線。 此物件包含電腦的名稱、您想要連線的 WMI 命名空間,以及任何相關的認證和驗證層級。

使用 VBScript 連線到遠端系統

  1. 指定連線資訊,例如遠端電腦名稱稱、認證和連線的驗證層級。

    如果您要使用相同的認證連線到遠端電腦, (網域和使用者名稱) 登入,則可以在 GetObjectMoniker中指定連線資訊,如下列程式碼範例所述。

    strComputer = "Computer_B"
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
    

    一般而言,您應該指定要連線到遠端電腦上的 WMI 命名空間。 這是因為預設命名空間在不同的電腦上可能不同。 指定 命名空間可確保您連線到所有電腦上的相同命名空間。

    如需使用 Moniker 連線之 VBScript 常數和腳本字串的詳細資訊,請參閱 使用 VBScript 設定預設進程安全性層級

  2. 如果您連線到不同網域中的遠端電腦,或使用不同的使用者名稱和密碼,則必須使用 SWbemLocator.ConnectServer 方法。

    如同 Moniker,您可以使用 ConnectServer 來指定遠端連線的認證、驗證層級和命名空間。 下列程式碼範例說明如何使用 ConnectServer,以系統管理員帳戶和密碼存取遠端電腦。

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. 使用 ConnectServer 函式進行遠端連線時,請在 呼叫 SWbemServices.Security所取得的安全性物件上設定模擬和驗證。 您可以使用列舉 WbemImpersonationLevelEnum 來指定模擬層級。

    下列程式碼範例會設定先前 VBScript 程式碼範例的模擬層級。

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    請注意,某些連線需要特定的驗證層級。 如需詳細資訊,請參閱設定用戶端應用程式進程安全性和保護腳本用戶端

    特別是,如果在遠端電腦上連線的命名空間需要加密連線,則您應該將驗證層級設定為 RPC_C_AUTHN_LEVEL_PKT_PRIVACY 或 6,才能傳回資料。 您也可以使用此驗證層級,即使命名空間不需要它也一樣。 這可確保資料在跨網路時加密。 如果您嘗試設定的驗證層級低於 允許,則會傳回拒絕存取的訊息。 如需詳細資訊,請參閱 要求對命名空間進行加密連線

建立連線之後,您可以繼續存取 WMI 資料。 如需詳細資訊,請參閱 腳本和應用程式的 WMI 工作

範例

如需較大的 VBScript 範例,請參閱 SWbemLocator.ConnectServer 參考頁面中的一節。

下列 VBScript 程式碼範例會在每部電腦上建立遠端電腦名稱稱陣列,然後顯示隨插即用裝置的名稱Win32_PnPEntity,以連線到相同網域中的一組遠端電腦。 若要執行下列腳本,您必須是遠端電腦上的系統管理員。 請注意,腳本會在模擬層級設定之後新增遠端電腦名稱稱之前所需的 「\\」。 如需 WMI 路徑的詳細資訊,請參閱 描述 WMI 物件的位置

On Error Resume Next 
arrComputers = Array("Computer1","Computer2","Computer3")
For Each strComputer In arrComputers
    WScript.Echo
    WScript.Echo "===================================="
    WScript.Echo "Computer: "& strComputer
    WScript.Echo "===================================="

    Set objWMIService = GetObject("winmgmts:\\" & strComputer& "\Root\CIMv2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PnPEntity instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: "& objItem.Name
        Wscript.Echo "Status: "& objItem.Status
    Next
Next

下列 VBScript 程式碼範例可讓您使用不同的認證連線到遠端電腦。 例如,不同網域中的遠端電腦,或連線到需要不同使用者名稱和密碼的遠端電腦。 在此情況下,請使用 SWbemServices.ConnectServer 連線。

' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
 
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     strUser, _
                                                     strPassword, _
                                                     "MS_409", _
                                                     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next

連線到遠端電腦上的 WMI