Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un script puede usar la configuración predeterminada de autenticación y suplantación de WMI. Sin embargo, el script puede necesitar una conexión con más seguridad o puede conectarse a un espacio de nombres que requiera una conexión cifrada. Para obtener más información, vea Establecer descriptores de seguridad del espacio de nombres y Requerir una conexión cifrada a un espacio de nombres.
En el caso más sencillo, un script puede usar la configuración predeterminada de autenticación y suplantación. WMI normalmente se ejecuta en un host de servicio compartido y comparte la misma autenticación que otros procesos del host. Si desea ejecutar el proceso WMI con un nivel de autenticación diferente, ejecute WMI con el comando winmgmt con el modificador /standalonehost y establezca el nivel de autenticación para WMI generalmente. Para obtener más información, vea Mantener la seguridad de WMI.
El siguiente script usa la configuración predeterminada para los niveles de suplantación y autenticación.
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
También puede usar un moniker en una llamada a GetObject y establecer la configuración de seguridad predeterminada, como en el ejemplo siguiente.
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
Para obtener más información sobre cómo establecer diferentes niveles de suplantación o autenticación en un script, o para establecer los valores predeterminados para un equipo, consulte los temas siguientes:
- Cambio de las credenciales de autenticación predeterminadas mediante VBScript
- Cambio de la configuración de suplantación predeterminada mediante VBScript
- Establecimiento del nivel de suplantación predeterminado mediante el Registro
- Acceso al objeto SWbemSecurity en VBScript
- SWbemSecurity
Cambio de las credenciales de autenticación predeterminadas mediante VBScript
Puede cambiar el nivel de autenticación en un script mediante una cadena de moniker y los objetos SWbemLocator y SWbemSecurity .
El nivel de autenticación debe establecerse según los requisitos del sistema operativo de destino al que se conecta. Para obtener más información, vea Conectar entre diferentes sistemas operativos.
En el siguiente ejemplo de código de VBScript se muestra cómo cambiar el nivel de autenticación en un script que obtiene los datos de espacio libre de un equipo remoto denominado "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
En las conexiones de etiqueta de script a WMI, use el nombre corto que se muestra en la columna "Nombre/Descripción de Etiqueta" de la tabla siguiente. Por ejemplo, en el siguiente script, el nivel de autenticación se establece en WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
En la tabla siguiente se enumeran los niveles de autenticación que puede establecer. Estos niveles se definen en Wbemdisp.tlb en la enumeración WbemAuthenticationLevelEnum.
| Nombre/valor | Descripción |
|---|---|
|
WbemAuthenticationLevelDefault 0 |
Moniker: valor predeterminado WMI usa la configuración de autenticación predeterminada de Windows. Esta es la configuración recomendada que permite a WMI negociar el nivel requerido por el servidor que devuelve datos. Sin embargo, si el espacio de nombres requiere cifrado, use WbemAuthenticationLevelPktPrivacy. |
|
WbemAuthenticationLevelNone 1 |
Moniker: Ninguno No usa autenticación. |
|
WbemAuthenticationLevelConnect 2 |
Moniker: Conectar Autentica las credenciales del cliente solo cuando el cliente establece una relación con el servidor. |
|
WbemAuthenticationLevelCall 3 |
Llamada Solo se autentica al principio de cada llamada cuando el servidor recibe la solicitud. |
|
WbemAuthenticationLevelPkt 4 |
Moniker: Pkt Autentica que todos los datos recibidos proceden del cliente esperado. |
|
WbemAuthenticationLevelPktIntegrity 5 |
Moniker: PktIntegrity Autentica y comprueba que no se ha modificado ninguno de los datos transferidos entre el cliente y el servidor. |
|
WbemAuthenticationLevelPktPrivacy 6 |
Moniker: PktPrivacy Autentica todos los niveles de suplantación anteriores y cifra el valor de argumento de cada llamada a procedimiento remoto. Use esta configuración si el espacio de nombres al que se va a conectar requiere una conexión cifrada. |
Para determinar una llamada correcta, compruebe el valor devuelto después de cambiar el nivel de autenticación.
Por ejemplo, dado que las conexiones locales siempre tienen un nivel de autenticación de wbemAuthenticationLevelPktPrivacy, el ejemplo siguiente no puede establecer el nivel de autenticación porque se conecta al equipo local.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
Un proveedor puede establecer la seguridad en un espacio de nombres para que no se devuelvan datos a menos que use la privacidad de paquetes (PktPrivacy) en la conexión a ese espacio de nombres. Esto garantiza que los datos estén cifrados cuando cruzan la red. Si intenta establecer un nivel de autenticación inferior, recibirá un mensaje de acceso denegado. Para obtener más información, consulte Protección de espacios de nombres WMI.
Cambio de los niveles de suplantación predeterminados mediante VBScript
Al realizar llamadas a la API de scripting para WMI, se recomienda usar los valores predeterminados que WMI proporciona para el nivel de suplantación. Las llamadas remotas y algunos proveedores con más de un salto de red requieren un nivel de suplantación de identidad mayor que el que utiliza WMI. Si el nivel de suplantación no es suficiente, un proveedor podría rechazar una solicitud o proporcionar información incompleta.
Si no establece el nivel de suplantación en un identificador o estableciendo SWbemSecurity.ImpersonationLevel en un objeto securizable, entonces establezca el nivel de suplantación DCOM predeterminado para el sistema operativo. El nivel de suplantación debe establecerse según los requisitos del sistema operativo de destino al que se conecta. Para obtener más información, vea Conectar entre diferentes sistemas operativos.
En el siguiente ejemplo de código de VBScript se muestra cómo cambiar el nivel de suplantación en el mismo script mostrado anteriormente.
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
En la tabla siguiente se enumeran los niveles de autenticación de WbemImpersonationLevelEnum que usan.
| Nombre/valor | Descripción |
|---|---|
|
wbemImpersonationLevelAnonymous 1 |
Moniker: Anónimo Oculta las credenciales del autor de la llamada. Es posible que se produzca un error en las llamadas a WMI con este nivel de suplantación. |
|
wbemImpersonationLevelIdentify 2 |
Moniker: Identificación Permite a los objetos consultar las credenciales del autor de la llamada. Es posible que se produzca un error en las llamadas a WMI con este nivel de suplantación. |
|
wbemImpersonationLevelImpersonate 3 |
Moniker: Suplantación Permite que los objetos usen las credenciales del autor de la llamada. Este es el nivel de suplantación recomendado para la API de secuencias de comandos para llamadas WMI. |
|
wbemImpersonationLevelDelegate 4 |
Moniker: Delegado Permite a los objetos permitir que otros objetos usen las credenciales del autor de la llamada. Esta suplantación funcionará con la API de scripting para llamadas WMI, pero puede constituir un riesgo de seguridad innecesario. |
El siguiente ejemplo muestra cómo configurar la impersonación en una cadena moniker al obtener una instancia específica de Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Para obtener más información, vea Crear una aplicación WMI o un script.
Establecimiento del nivel de suplantación predeterminado mediante el Registro
Si tiene acceso al registro, también puede establecer la clave del Registro de nivel de suplantación predeterminada. Esta clave especifica qué nivel de suplantación usa la API de scripting para WMI a menos que se especifique lo contrario. La siguiente ruta identifica la ruta del registro.
\ HKEY_LOCAL_MACHINESOFTWARE\Microsoft\WBEM\Scripting\Nivel de suplantación predeterminado
De forma predeterminada, la clave del Registro se establece en 3, especificando el nivel de suplantación. Algunos proveedores pueden requerir un mayor nivel de suplantación.
Acceso al objeto SWbemSecurity en VBScript
La otra forma de establecer el nivel de suplantación es desde el objeto de seguridad SWbemSecurity, que aparece como la propiedad Security_ de los objetos SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath y SwbemLocator.
WMI pasa la configuración de seguridad de un objeto primario a los descendientes del objeto original. Por lo tanto, puede establecer el nivel de suplantación de un objeto SWbemServices después de iniciar sesión en WMI y llamadas API mediante este objeto o objetos creados a partir de él, como objetos de tipo SWbemObject.