Como posso saber se o Windows está sendo executado no modo de segurança?

12

Eu tenho um servidor Windows que às vezes é reiniciado no modo de segurança após as atualizações. Estou trabalhando nesse problema, mas o que eu realmente gostaria de saber é como posso verificar se o Windows está sendo executado no modo de segurança ou não.

O ideal é que eu gostaria de incorporá-lo em um script que enviaria uma verificação passiva para a nossa caixa Nagios com o status.

Existe alguma variável ambiental que eu possa usar ou alguma forma de obter essa informação através da linha de comando?

    
por cwd 01.10.2012 / 20:58

4 respostas

22

Acho que isso faz o que você está procurando

PS C:\> gwmi win32_computersystem | select BootupState

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

link

Valores de retorno possíveis:

Normal boot
Fail-safe boot
Fail-safe with network boot
    
por 01.10.2012 / 21:53
8

De acordo com este artigo , uma variável de ambiente chamada SAFEBOOT_OPTION está definida como Minimal ou Network se o sistema for iniciado no modo de segurança ou no modo de segurança com rede; caso contrário, a variável não será definida.

Um teste no valor da variável deve fazer o truque; no entanto, lembre-se de que, se o sistema estiver sendo executado no modo de segurança, ele não terá nenhuma rede para começar, portanto, relatar seu status pode ser ... difícil.

    
por 01.10.2012 / 21:43
3

EDIT: meu mal, eu não li a KB completamente o suficiente para perceber que é basicamente inútil como uma resposta por si só.

Uma maneira mais útil de determinar se você está no modo de segurança não é : Interno do Microsoft® Windows®: Microsoft Windows ServerTM 2003, Windows XP e Windows 2000 por Mark E. Russinovich, David A. Solomon .

The Windows kernel scans boot parameters in search of the safe-mode switches early during the boot and sets the internal variable InitSafeBootMode to a value that reflects the switches the kernel finds. The kernel writes the InitSafeBootMode value to the registry value HKLM\SYSTEM\CurrentControlSet\SafeBoot\Option\Option Value so that user-mode components, such as the SCM, can determine what boot mode the system is in.

Pegue o acima e faça par com o abaixo, e você terá um local do registro que você pode verificar com um valor numérico que você pode traduzir em algo útil.

No support.microsoft KB, intitulado "Como determinar se o sistema está sendo executado no Modo de segurança a partir de um driver de dispositivo".

The Windows OS kernel exports a pointer to a ULONG variable that is named InitSafeBootMode. This variable contains the Safe Mode settings.

A device driver can determine whether the system is running in Safe Mode by the value of the InitSafeBootMode variable. A value of 0 means that the system is not running in Safe Mode.

The following table lists the modes for other values.
Value Mode
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3* SAFEBOOT_DSREPAIR
*Note The value of 3 applies to Windows domain controllers only.

    
por 01.10.2012 / 21:24
3

Você também pode executar a consulta WMI sugerida por Craig620 diretamente da linha de comando, se você não estiver usando o PowerShell :

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot
    
por 01.10.2012 / 22:31