Connessione a WMI in modalità remota con VBScript

È possibile creare una connessione remota a WMI con VBScript creando un oggetto connessione. Questo oggetto contiene il nome del computer, lo spazio dei nomi WMI a cui connettersi, nonché eventuali credenziali e livelli di autenticazione pertinenti.

Per connettersi a un sistema remoto tramite VBScript

  1. Specificare le informazioni di connessione, ad esempio il nome del computer remoto, le credenziali e il livello di autenticazione per la connessione.

    Se ci si connette a un computer remoto usando le stesse credenziali (dominio e nome utente) con cui si è connessi, è possibile specificare le informazioni di connessione in un monikerGetObject, come descritto nell'esempio di codice seguente.

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

    In generale, è necessario specificare lo spazio dei nomi WMI a cui connettersi nel computer remoto. Ciò è dovuto al fatto che lo spazio dei nomi predefinito non è lo stesso in computer diversi. Se si specifica lo spazio dei nomi, si garantisce la connessione allo stesso spazio dei nomi in tutti i computer.

    Per altre informazioni sulle costanti VBScript e sulle stringhe di scripting per l'uso della connessione al moniker, vedere Impostazione del livello di sicurezza del processo predefinito tramite VBScript.

  2. Se ci si connette a un computer remoto in un dominio diverso o si usa un nome utente e una password diversi, è necessario utilizzare il metodo SWbemLocator.ConnectServer .

    Come per un moniker, si usa ConnectServer per specificare le credenziali, il livello di autenticazione e lo spazio dei nomi per la connessione remota. L'esempio di codice seguente descrive l'uso di ConnectServer per accedere a un computer remoto usando un account amministratore e una password.

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. Quando si usa la funzione ConnectServer per le connessioni remote, impostare la rappresentazione e l'autenticazione sull'oggetto di sicurezza ottenuto da una chiamata a SWbemServices.Security. È possibile usare l'enumerazione WbemImpersonationLevelEnum per specificare il livello di rappresentazione.

    Nell'esempio di codice seguente viene impostato il livello di rappresentazione per l'esempio di codice VBScript precedente.

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    Si noti che alcune connessioni richiedono un livello di autenticazione specifico. Per altre informazioni, vedere Impostazione della sicurezza del processo dell'applicazione client e protezione dei client di scripting.

    In particolare, è necessario impostare il livello di autenticazione su RPC_C_AUTHN_LEVEL_PKT_PRIVACY o 6 se lo spazio dei nomi a cui ci si connette nel computer remoto richiede una connessione crittografata prima di restituire i dati. È anche possibile usare questo livello di autenticazione, anche se lo spazio dei nomi non lo richiede. In questo modo si garantisce che i dati vengano crittografati durante l'attraversamento della rete. Se si tenta di impostare un livello di autenticazione inferiore a quello consentito, verrà restituito un messaggio di accesso negato. Per altre informazioni, vedere Richiesta di una connessione crittografata a uno spazio dei nomi.

Dopo aver effettuato la connessione, è possibile continuare ad accedere ai dati WMI. Per altre informazioni, vedere Attività WMI per script e applicazioni.

Esempio

Per un esempio VBScript più ampio, vedere la sezione Esempi nella pagina di riferimento SWbemLocator.ConnectServer .

L'esempio di codice VBScript seguente si connette a un gruppo di computer remoti nello stesso dominio creando una matrice di nomi di computer remoti e quindi visualizzando i nomi dei dispositivi Plug and Play, ovvero istanze di Win32_PnPEntity, in ogni computer. Per eseguire lo script seguente, è necessario essere un amministratore nei computer remoti. Si noti che il valore "\\" necessario prima che il nome del computer remoto venga aggiunto dallo script dopo l'impostazione del livello di rappresentazione. Per altre informazioni sui percorsi WMI, vedere Descrizione della posizione di un oggetto 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

L'esempio di codice VBScript seguente consente di connettersi a un computer remoto usando credenziali diverse. Ad esempio, un computer remoto in un dominio diverso o connettersi a un computer remoto che richiede un nome utente e una password diversi. In questo caso, usare la connessione 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

Connessione a WMI in un computer remoto