Impostare il livello di sicurezza del processo predefinito con VBScript

Uno script può usare le impostazioni predefinite di autenticazione e rappresentazione WMI. Tuttavia, lo script potrebbe richiedere una connessione con maggiore sicurezza o potrebbe connettersi a uno spazio dei nomi che richiede una connessione crittografata. Per altre informazioni, vedere Impostazione dei descrittori di sicurezza Namepace e Richiesta di una connessione crittografata a uno spazio dei nomi.

Nel caso più semplice, uno script può usare le impostazioni di autenticazione e rappresentazione predefinite. WMI viene in genere eseguito in un host del servizio condiviso e condivide la stessa autenticazione di altri processi nell'host. Se si vuole eseguire il processo WMI con un livello di autenticazione diverso, eseguire WMI con il comando winmgmt con l'opzione /standalonehost e impostare in genere il livello di autenticazione per WMI. Per altre informazioni, vedere Gestione della sicurezza WMI.

Lo script seguente usa le impostazioni predefinite per i livelli di rappresentazione e autenticazione.

strComputer = "." 
Set objServices = GetObject("winmgmts:\\" _
    & strComputer & "\root\CIMV2") 
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

È anche possibile usare un moniker in una chiamata a GetObject e impostare le impostazioni di sicurezza predefinite, come nell'esempio seguente.

strComputer = "." 
Set objServices = GetObject( _
    "winmgmts:{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!root/cimv2")
set objProcessSet = objServices.ExecQuery _
     ("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
    WScript.Echo Process.Name
Next

Per altre informazioni sull'impostazione di diversi livelli di rappresentazione o autenticazione in uno script o per l'impostazione dei valori predefiniti per un computer, vedere gli argomenti seguenti:

Modifica delle credenziali di autenticazione predefinite tramite VBScript

È possibile modificare il livello di autenticazione in uno script usando una stringa moniker e gli oggetti SWbemLocator e SWbemSecurity .

Il livello di autenticazione deve essere impostato in base ai requisiti del sistema operativo di destinazione a cui ci si connette. Per altre informazioni, vedere Connessione tra sistemi operativi diversi.

Nell'esempio di codice VBScript seguente viene illustrato come modificare il livello di autenticazione in uno script che ottiene i dati dello spazio libero da un computer remoto denominato "Server1".

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{authenticationLevel=Pkt}!\\" _
    & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
    Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
        "FreeSpace: " & vbTab & objDisk.FreeSpace 
    NextstrComputer = "." 
    Set objServices = GetObject( "winmgmts:{impersonationLevel=impersonate," _
                               & "authenticationLevel=pktPrivacy}!root/cimv2")
    Set objProcessSet = objServices.ExecQuery("SELECT Name FROM Win32_Process",,48)
    For Each Process in objProcessSet
        WScript.Echo Process.Name
    Next
Next

Nelle connessioni moniker di script a WMI usare il nome breve indicato nella colonna "Nome/descrizione moniker" della tabella seguente. Nello script seguente, ad esempio, il livello di autenticazione è impostato su WbemAuthenticationLevelPktIntegrity.

SetobjWMIService = GetObject( _
    "winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")

Nella tabella seguente sono elencati i livelli di autenticazione che è possibile impostare. Questi livelli sono definiti in Wbemdisp.tlb nell'enumerazione WbemAuthenticationLevelEnum.

Nome/valore Descrizione
WbemAuthenticationLevelDefault
0
Moniker: impostazione predefinita
WMI usa l'impostazione di autenticazione di Windows predefinita. Questa è l'impostazione consigliata che consente a WMI di negoziare il livello richiesto dal server che restituisce dati. Tuttavia, se lo spazio dei nomi richiede la crittografia, usare WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Moniker: Nessuno
Non usa alcuna autenticazione.
WbemAuthenticationLevelConnect
2
Moniker: Connetti
Autentica le credenziali del client solo quando il client stabilisce una relazione con il server.
WbemAuthenticationLevelCall
3
Chiamata
Esegue l'autenticazione solo all'inizio di ogni chiamata quando il server riceve la richiesta.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Autentica che tutti i dati ricevuti provengono dal client previsto.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Autentica e verifica che nessuno dei dati trasferiti tra client e server sia stato modificato.
WbemAuthenticationLevelPktPrivacy
6
Moniker: PktPrivacy
Autentica tutti i livelli di rappresentazione precedenti e crittografa il valore dell'argomento di ogni chiamata di procedura remota. Usare questa impostazione se lo spazio dei nomi a cui ci si connette richiede una connessione crittografata.

Per determinare una chiamata riuscita, controllare il valore restituito dopo aver modificato il livello di autenticazione.

Ad esempio, poiché le connessioni locali hanno sempre un livello di autenticazione wbemAuthenticationLevelPktPrivacy, l'esempio seguente non riesce a impostare il livello di autenticazione perché si connette al computer locale.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!" _
    & "\\" & strComputer & "\root\cimv2")

Un provider può impostare la sicurezza in uno spazio dei nomi in modo che non vengano restituiti dati a meno che non si usi la privacy dei pacchetti (PktPrivacy) nella connessione a tale spazio dei nomi. 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, verrà visualizzato un messaggio di accesso negato. Per altre informazioni, vedere Protezione degli spazi dei nomi WMI.

Modifica dei livelli di rappresentazione predefiniti tramite VBScript

Quando si effettuano chiamate all'API di scripting per WMI, è consigliabile usare le impostazioni predefinite fornite da WMI per il livello di rappresentazione. Le chiamate remote e alcuni provider con più hop di rete richiedono un livello di rappresentazione superiore a quello usato da WMI. Se il livello di rappresentazione non è sufficiente, un provider potrebbe rifiutare una richiesta o fornire informazioni incomplete.

Se non si imposta il livello di rappresentazione in un moniker o impostando SWbemSecurity.ImpersonationLevel su un oggetto a protezione diretta, impostare il livello di rappresentazione DCOM predefinito per il sistema operativo. Il livello di rappresentazione deve essere impostato in base ai requisiti del sistema operativo di destinazione a cui ci si connette. Per altre informazioni, vedere Connessione tra sistemi operativi diversi.

L'esempio di codice VBScript seguente illustra la modifica del livello di rappresentazione nello stesso script illustrato in precedenza.

strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" _
                              & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
             "FreeSpace: " & vbTab & objDisk.FreeSpace 
Next

Nella tabella seguente sono elencati i livelli di autenticazione in WbemImpersonationLevelEnum usati.

Nome/valore Descrizione
wbemImpersonationLevelAnonymous
1
Moniker: Anonimo
Nasconde le credenziali del chiamante. Le chiamate a WMI potrebbero non riuscire a questo livello di rappresentazione.
wbemImpersonationLevelIdentify
2
Moniker: Identificare
Consente agli oggetti di eseguire query sulle credenziali del chiamante. Le chiamate a WMI potrebbero non riuscire a questo livello di rappresentazione.
wbemImpersonationLevelImpersonate
3
Moniker: Rappresentazione
Consente agli oggetti di usare le credenziali del chiamante. Questo è il livello di rappresentazione consigliato per l'API di scripting per le chiamate WMI.
wbemImpersonationLevelDelegate
4
Moniker: Delegato
Consente agli oggetti di permettere ad altri oggetti di usare le credenziali del chiamante. Questa rappresentazione funzionerà con l'API di scripting per le chiamate WMI, ma potrebbe costituire un rischio di sicurezza non necessario.

Nell'esempio seguente viene illustrato come impostare la rappresentazione in una stringa del moniker quando si ottiene un'istanza specifica di Win32_Process.

Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")

Per altre informazioni, vedere Creazione di un'applicazione WMI o di uno script.

Impostazione del livello di rappresentazione predefinito usando il Registro di sistema

Se si ha accesso al Registro di sistema, è anche possibile impostare la chiave del Registro di sistema di rappresentazione predefinita. Questa chiave specifica il livello di rappresentazione dell'API scripting per WMI, a meno che non sia specificato diversamente. Il percorso seguente identifica il percorso del Registro di sistema.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Livello di rappresentazione predefinito

Per impostazione predefinita, la chiave del Registro di sistema è impostata su 3, specificando il livello di rappresentazione rappresentazione. Alcuni provider possono richiedere un livello superiore di rappresentazione.

Accesso all'oggetto SWbemSecurity in VBScript

L'altro modo in cui è possibile impostare il livello di rappresentazione è dall'oggetto di sicurezza SWbemSecurity, che viene visualizzato come proprietà Security_ degli oggetti SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath e SwbemLocator.

WMI passa l'impostazione di sicurezza di un oggetto padre ai discendenti dell'oggetto originale. È pertanto possibile impostare il livello di rappresentazione di un oggetto SWbemServices dopo aver eseguito l'accesso alle chiamate WMI e API usando questo oggetto o oggetti creati da esso, ad esempio oggetti di tipo SWbemObject.

Connessione a WMI in un computer remoto

Protezione dei client di scripting