14 votos

¿Cómo puedo saber si Windows está funcionando en modo seguro?

Tengo un servidor Windows que a veces se reinicia en modo seguro después de las actualizaciones. Estoy trabajando en ese tema, pero lo que realmente me gustaría saber es cómo puedo comprobar para ver si Windows se ejecuta en modo seguro o no.

Lo ideal sería incorporarlo a un script que enviara una comprobación pasiva a nuestra caja de Nagios con el estado.

¿Hay alguna variable de entorno que pueda utilizar o alguna forma de obtener esta información a través de la línea de comandos?

1 votos

No hay "modo de usuario único" en Windows... ¿te refieres al modo seguro?

1 votos

He actualizado la pregunta y he cambiado "modo de usuario único" por "modo seguro" - mis disculpas

0 votos

La pregunta es realmente interesante, busqué en Google un poco y no pude encontrar ninguna manera razonable (como en, "sin ser un controlador de dispositivo") para comprobar mediante programación si un sistema se ejecuta en modo seguro ... Voy a votar, pero por favor, no aceptes la respuesta de @joeqwerty, ya que él estaba hablando de Terminal Services.

24voto

Craig620 Puntos 1580

Creo que esto hace lo que estás buscando

PS C:\> gwmi win32_computersystem | select BootupState

BootupState
-----------
Normal boot

http://msdn.microsoft.com/en-us/library/Windows/desktop/aa394102%28v=vs.85%29.aspx

Posibles valores de retorno:

Normal boot
Fail-safe boot
Fail-safe with network boot

0 votos

Niiiiiiiiice...

0 votos

Dicho de otro modo: (gwmi win32_computersystem -Property BootupState).BootupState

9voto

yulia Puntos 16

Según este artículo una variable de entorno llamada SAFEBOOT_OPTION se establece como Minimal o Network si el sistema se inicia en Modo Seguro o en Modo Seguro con Red; en caso contrario, la variable no se establece.

Una prueba sobre el valor de la variable debería servir; sin embargo, ten en cuenta que si el sistema se está ejecutando realmente en modo seguro, no tendrá red para empezar, por lo que informar de su estado podría ser... difícil.

0 votos

Confirmado esto en un rápido reinicio en modo seguro, también.

4voto

yulia Puntos 16

También puede ejecutar la consulta WMI sugerida por Craig620 directamente desde la línea de comandos, si no está utilizando PowerShell:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

3voto

HopelessN00b Puntos 38607

EDIT: culpa mía, no leí la KB lo suficiente como para darme cuenta de que es básicamente inútil como respuesta por sí sola.

Una forma más útil de determinar si estás en modo seguro o no es desde : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000 por Mark E. Russinovich, David A. Solomon .

El kernel de Windows escanea los parámetros de arranque en busca de los interruptores de modo seguro al principio del arranque y establece la variable interna InitSafeBootMode a un valor que refleje los interruptores que encuentra el núcleo. El núcleo escribe el InitSafeBootMode al valor del registro HKLM \SYSTEM\CurrentControlSet\SafeBoot\Option\Option Valor para que los componentes del modo usuario, como el SCM, puedan determinar en qué modo de arranque se encuentra el sistema.

Tome lo anterior y emparéjelo con lo siguiente, y tendrá una ubicación de registro que puede comprobar con un valor numérico que puede traducir en algo útil.

De la KB de support.microsoft titulada, "Cómo determinar si el sistema está funcionando en modo seguro desde un controlador de dispositivo".

El kernel del sistema operativo Windows exporta un puntero a una variable ULONG que se llamada InitSafeBootMode. Esta variable contiene la configuración del modo seguro.

Un controlador de dispositivo puede determinar si el sistema se está ejecutando en modo seguro por el valor de la variable InitSafeBootMode. Un valor de 0 significa que el sistema no se está ejecutando en modo seguro.

La siguiente tabla muestra los modos para otros valores.
Valor Modo
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3* SAFEBOOT_DSREPAIR
*Nota El valor de 3 se aplica sólo a los controladores de dominio de Windows.

0 votos

¿Hay alguna manera de comprobar esto a través de la línea de comandos o tendría que escribir una aplicación que pudiera comprobar InitSafeBootMode ?

0 votos

A eso me refería con mi comentario "no he podido encontrar ninguna forma razonable"... incluso si se pudiera escribir un controlador de dispositivo para comprobarlo, conseguir que se ejecute en el sistema de destino sería bastante complicado.

0 votos

@cwd En realidad necesitarías un controlador en modo kernel. Y tenerlo instalado. Y que se ejecute incluso en modo seguro. Y luego una aplicación para hablar con el driver y reportar su estado. Esto se pondría muy feo muy rápido.

1voto

Sigma6RPU Puntos 398

HKLM \SYSTEM\CurrentControlSet\Control\SystemStartOptions contiene una cadena y si está en modo seguro habrá un "SAFEBOOT:???" dentro de la cadena donde ??? es MINIMAL o NETWORK. Esto se actualiza en cada arranque.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: