Connessione a WMI con VBScript

Gli script WMI possono condensare molti dei passaggi necessari in un programma C++. Possono connettersi a WMI, non solo tramite un oggetto SWbemLocator , ma anche tramite il moniker "winmgmts:". Un moniker è un nome breve che individua uno spazio dei nomi, una classe o un'istanza in WMI. Il nome "winmgmts:" è il moniker WMI che indica all'host di Windows Script di utilizzare gli oggetti WMI, si connette allo spazio dei nomi predefinito e ottiene un oggetto SWbemServices . Altre informazioni di connessione, ad esempio un livello di rappresentazione o una classe o un'istanza specifica, vengono visualizzate nella stringa che segue il nome del moniker. È possibile usare i moniker nelle chiamate che creano o ottengono oggetti WMI. Per altre informazioni, vedere Costruzione di una stringa moniker.

La procedura seguente descrive come connettersi a WMI usando SWbemLocator.

Per connettersi a WMI tramite SWbemLocator

  1. Recuperare un oggetto localizzatore con una chiamata a CreateObject.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. Accedere allo spazio dei nomi usando una chiamata al metodo ConnectServer .

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    Se non si specifica un computer nella chiamata a ConnectServer, WMI si connette al computer locale. Se non si specifica uno spazio dei nomi, WMI si connette allo spazio dei nomi specificato nella chiave del Registro di sistema.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Spazio dei nomi predefinito

    Lo spazio dei nomi predefinito è \root\cimv2. Per altre informazioni sugli spazi dei nomi, vedere Creazione di gerarchie all'interno di WMI.

  3. Impostare il livello di rappresentazione con una chiamata al metodo SWbemServices.Security_ .

    objService.Security_.ImpersonationLevel = 3 
    

    Per altre informazioni, vedere Impostazione del livello di sicurezza del processo predefinito tramite VBScript.

  4. Implementare lo scopo dello script.

    WMI espone un'ampia gamma di oggetti di scripting che usano per accedere e modificare i dati nella rete. Per altre informazioni, vedere Modifica delle informazioni sulla classe e sull'istanza e sull'API di scripting per WMI.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    objService.Security_.ImpersonationLevel = 3
    Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob")
    i=0
    For each Job in Jobs
        i = i+1   
        WScript.Echo Job.JobId & "  " & Job.Command & VBNewLine
    Next
    If i = 0 Then
        WScript.Echo "No Jobs Scheduled with the AT command were found"
    End If
    

La procedura seguente descrive come connettersi a WMI e recuperare un oggetto usando un moniker.

Per connettersi a WMI e recuperare un oggetto usando un moniker

  1. Chiamare GetObject con un moniker nel parametro di input.

    'the simple version
    Set MyObject = GetObject("winMgmts::Win32_scheduledJob")
    
    'Or the more complex version
    strComputer = "."
    Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
    

    Il moiniker contiene un numero di elementi che è possibile usare per connettersi a WMI:

    • "winmgmts:" indica a WSH di usare gli oggetti API di scripting. In questo particolare esempio, WSH saprà che deve restituire un oggetto SWbemObject che descrive la prima Win32_scheduledJob nel sistema. Altri oggetti da restituire sono un oggetto SWbemCollection o SWbemServices , a seconda del moniker descritto.

    • Facoltativamente, è possibile impostare i livelli di sicurezza per la connessione. Si noti che non è possibile impostare le informazioni su nome e password in un moniker, tuttavia. Per altre informazioni, vedere Protezione dei client di scripting.

    • Facoltativamente, è possibile definire il percorso dell'oggetto WMI. Sono inclusi il computer locale o remoto, lo spazio dei nomi e il nome della classe . Per altre informazioni sull'uso di VBScript GetObject negli script WMI, vedere Creazione di un'istanza e recupero di un'istanza WMI.

  2. Anziché recuperare un singolo elemento o raccolta, è anche possibile scegliere di recuperare l'oggetto SWbemServices , come descritto nell'esempio precedente. Successivamente, è possibile chiamare query aggiuntive sull'oggetto restituito.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob")
    For Each objJob in colScheduledJobs
        Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine
    Next
    

    Nell'esempio precedente, rappresenta o impersonationLevel=3, è il livello di sicurezza del processo predefinito. Nell'esempio seguente non è necessario specificare questo livello di sicurezza del processo, a meno che non sia necessario modificare la sicurezza del processo in modo da delegare. Per altre informazioni, vedere Impostazione del livello di sicurezza del processo predefinito tramite VBScript.

Scripting in WMI