Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un script peut utiliser les paramètres d’authentification WMI et d’emprunt d’identité par défaut. Toutefois, le script peut avoir besoin d’une connexion avec plus de sécurité ou peut se connecter à un espace de noms nécessitant une connexion chiffrée. Pour plus d’informations, consultez Définition des descripteurs de sécurité de l’espace de noms et exiger une connexion chiffrée à un espace de noms.
Dans le cas le plus simple, un script peut utiliser les paramètres d’authentification et d’emprunt d’identité par défaut. WMI s’exécute normalement dans un hôte de service partagé et partage la même authentification que les autres processus de l’hôte. Si vous souhaitez exécuter le processus WMI avec un niveau d’authentification différent, exécutez WMI avec la commande winmgmt avec le commutateur /standalonehost et définissez généralement le niveau d’authentification pour WMI. Pour plus d’informations, consultez Maintenance de la sécurité WMI.
Le script suivant utilise les paramètres par défaut pour l’emprunt d’identité et les niveaux d’authentification.
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
Vous pouvez également utiliser un moniker dans un appel à GetObject et définir les paramètres de sécurité par défaut, comme dans l’exemple suivant.
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
Pour plus d’informations sur la définition de différents niveaux d’emprunt d’identité ou d’authentification dans un script, ou pour définir les valeurs par défaut d’un ordinateur, consultez les rubriques suivantes :
- Modification des informations d’identification d’authentification par défaut à l’aide de VBScript
- Modification des paramètres d’emprunt d’identité par défaut à l’aide de VBScript
- Définition du niveau d’emprunt d’identité par défaut à l’aide du Registre
- Accès à l’objet SWbemSecurity dans VBScript
- SWbemSecurity
Modification des informations d’identification d’authentification par défaut à l’aide de VBScript
Vous pouvez modifier le niveau d’authentification dans un script à l’aide d’une chaîne moniker et des objets SWbemLocator et SWbemSecurity .
Le niveau d’authentification doit être défini en fonction des exigences du système d’exploitation cible auquel vous vous connectez. Pour plus d’informations, consultez Connexion entre différents systèmes d’exploitation.
L’exemple de code VBScript suivant montre comment modifier le niveau d’authentification dans un script qui obtient les données d’espace libre à partir d’un ordinateur distant nommé « 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
Dans les connexions des scripts moniker à WMI, utilisez le nom court indiqué dans la colonne « Nom/description moniker » du tableau ci-dessous. Par exemple, dans le script suivant, le niveau d’authentification est défini sur WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
Le tableau suivant répertorie les niveaux d’authentification que vous pouvez définir. Ces niveaux sont définis dans Wbemdisp.tlb dans l’énumération WbemAuthenticationLevelEnum.
Nom/valeur | Descriptif |
---|---|
WbemAuthenticationLevelDefault 0 |
Moniker : valeur par défaut WMI utilise le paramètre d’authentification Windows par défaut. Il s’agit du paramètre recommandé qui permet à WMI de négocier le niveau requis par le serveur qui retourne des données. Toutefois, si l’espace de noms nécessite un chiffrement, utilisez WbemAuthenticationLevelPktPrivacy. |
WbemAuthenticationLevelNone 1 |
Moniker : Aucun N’utilise aucune authentification. |
WbemAuthenticationLevelConnect 2 |
Moniker : Se connecter Authentifie les informations d’identification du client uniquement lorsque le client établit une relation avec le serveur. |
WbemAuthenticationLevelCall 3 |
Appeler S’authentifie uniquement au début de chaque appel lorsque le serveur reçoit la demande. |
WbemAuthenticationLevelPkt 4 |
Moniker : Pkt Authentifie que toutes les données reçues proviennent du client attendu. |
WbemAuthenticationLevelPktIntegrity 5 |
Moniker : PktIntegrity Authentifie et vérifie qu’aucune des données transférées entre le client et le serveur n’a été modifiée. |
WbemAuthenticationLevelPktPrivacy 6 |
Moniker : PktPrivacy Authentifie tous les niveaux d’emprunt d’identité précédents et chiffre la valeur d’argument de chaque appel de procédure distante. Utilisez ce paramètre si l’espace de noms auquel vous vous connectez nécessite une connexion chiffrée. |
Pour déterminer un appel réussi, vérifiez la valeur de retour après avoir modifié le niveau d’authentification.
Par exemple, étant donné que les connexions locales ont toujours un niveau d’authentification de wbemAuthenticationLevelPktPrivacy, l’exemple suivant ne parvient pas à définir le niveau d’authentification, car il se connecte à l’ordinateur local.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
Un fournisseur peut définir la sécurité sur un espace de noms afin qu’aucune donnée ne soit retournée, sauf si vous utilisez la confidentialité des paquets (PktPrivacy) dans votre connexion à cet espace de noms. Cela garantit que les données sont chiffrées au fur et à mesure qu’elles traversent le réseau. Si vous essayez de définir un niveau d’authentification inférieur, vous obtiendrez un message d’accès refusé. Pour plus d’informations, consultez Sécurisation des espaces de noms WMI.
Modification des niveaux d’emprunt d’identité par défaut à l’aide de VBScript
Lorsque vous effectuez des appels à l’API Scripting pour WMI, il est recommandé d’utiliser les valeurs par défaut que WMI fournit pour le niveau d’emprunt d’identité. Les appels à distance et certains fournisseurs comprenant plusieurs transitions de réseau nécessitent un niveau d’emprunt d’identité supérieur à celui utilisé par WMI. Si le niveau d’emprunt d’identité n’est pas suffisant, un fournisseur peut refuser une demande ou fournir des informations incomplètes.
Si vous ne définissez pas le niveau d’emprunt d’identité dans un moniker ou en définissant SWbemSecurity.ImpersonationLevel sur un objet sécurisable, définissez le niveau d’emprunt d’identité DCOM par défaut pour le système d’exploitation. Le niveau d’emprunt d’identité doit être défini en fonction des exigences du système d’exploitation cible auquel vous vous connectez. Pour plus d’informations, consultez Connexion entre différents systèmes d’exploitation.
L’exemple de code VBScript suivant montre la modification du niveau d’emprunt d’identité dans le même script ci-dessus.
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
Le tableau suivant répertorie les niveaux d’authentification dans WbemImpersonationLevelEnum qui utilisent.
Nom/valeur | Descriptif |
---|---|
wbemImpersonationLevelAnonymous 1 |
Moniker : Anonyme Masque les informations d’identification de l’appelant. Les appels à WMI peuvent échouer avec ce niveau d’emprunt d’identité. |
wbemImpersonationLevelIdentify 2 |
Moniker : Identifiant Permet aux objets d’interroger les informations d’identification de l’appelant. Les appels à WMI peuvent échouer avec ce niveau d’emprunt d’identité. |
wbemImpersonationLevelImpersonate 3 |
Moniker : Usurpation d'identité Permet aux objets d’utiliser les informations d’identification de l’appelant. Il s’agit du niveau d’emprunt d’identité recommandé pour l’API Scripting pour les appels WMI. |
wbemImpersonationLevelDelegate 4 |
Moniker : Délégué Permet aux objets d’autoriser d’autres objets à utiliser les informations d’identification de l’appelant. Cet emprunt d’identité fonctionne avec l’API Scripting pour les appels WMI, mais peut constituer un risque de sécurité inutile. |
L’exemple suivant montre comment définir l’emprunt d’identité dans une chaîne de moniker lors de l’obtention d'une instance spécifique de Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Pour plus d’informations, consultez Création d’une application ou d’un script WMI.
Définition du niveau d’emprunt d’identité par défaut en utilisant le Registre
Si vous avez accès au Registre, vous pouvez également définir la clé de Registre du niveau d’emprunt d’identité par défaut. Cette clé spécifie le niveau d’emprunt d’identité que l’API Scripting pour WMI utilise, sauf indication contraire. Le chemin suivant identifie le chemin d’accès au Registre.
HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\WBEM\Script\Niveau d’emprunt d’identité par défaut
Par défaut, la clé de Registre est définie sur 3, en spécifiant le niveau d’emprunt d’identité. Certains fournisseurs peuvent avoir besoin d’un niveau plus élevé d’usurpation d’identité.
Accès à l’objet SWbemSecurity dans VBScript
L’autre façon de définir le niveau d’emprunt d’identité provient de l’objet de sécurité SWbemSecurity, qui apparaît comme la propriété Security_ des objets SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath et SwbemLocator.
WMI transmet le paramètre de sécurité d’un objet parent aux descendants de l’objet d’origine. Par conséquent, vous pouvez définir le niveau d’emprunt d’identité d’un objet SWbemServices après vous être connecté à WMI et aux appels d’API à l’aide de cet objet ou d’objets créés à partir de celui-ci, tels que les objets de type SWbemObject.