Condividi tramite


Connessione a WMI in remoto 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 GetObjectmoniker, 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. Questo perché è possibile che lo spazio dei nomi predefinito non sia lo stesso in computer diversi. Specificare lo spazio dei nomi garantisce la connessione allo stesso spazio dei nomi su tutti i computer coinvolti.

    Per altre informazioni sulle costanti VBScript e sulle stringhe di scripting per l'uso della connessione 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 usare il metodo SWbemLocator.ConnectServer.

    Come con 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 ulteriori informazioni, vedere Impostazione della sicurezza del processo dell'applicazione client e Sicurezza 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 mentre attraversano la 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 Richiedere 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à di WMI per script e applicazioni.

Esempi

Per un esempio VBScript di dimensioni maggiori, 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, istanze di Win32_PnPEntity, in ogni computer. Per eseguire lo script seguente, è necessario essere un amministratore nei computer remoti. Si noti che il carattere "\\" richiesto prima del nome del computer remoto è aggiunto dallo script in seguito all'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 connessioneSWbemServices.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 su un computer remoto