Назад | Перейти на главную страницу

Как узнать, работает ли Windows в безопасном режиме?

У меня есть сервер Windows, который иногда перезагружается в безопасном режиме после обновлений. Я работаю над этой проблемой, но мне очень хотелось бы знать, как я могу проверить, работает ли Windows в безопасном режиме или нет.

В идеале я хотел бы включить его в сценарий, который отправлял бы пассивную проверку нашему ящику Nagios со статусом.

Есть ли какая-нибудь переменная окружения, которую я могу использовать, или способ получить эту информацию через командную строку?

Я думаю, это то, что вы ищете

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

Возможные возвращаемые значения:

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

В соответствии с Эта статья, переменная среды с именем SAFEBOOT_OPTION установлен на Minimal или Network если система запущена в безопасном режиме или в безопасном режиме с загрузкой сетевых драйверов; в противном случае переменная не установлена.

Тест на значение переменной должен помочь; Однако имейте в виду, что если система действительно работает в безопасном режиме, для начала у нее не будет сети, поэтому сообщить о ее состоянии может быть ... сложно.

Вы также можете запустить запрос WMI, предложенный Craig620 прямо из командной строки, если вы не используете PowerShell:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

РЕДАКТИРОВАТЬ: плохо, я недостаточно внимательно прочитал базу знаний, чтобы понять, что это в основном бесполезно как ответ сам по себе.

Более удобный способ определить, находитесь ли вы в безопасном режиме или нет, от: Внутреннее устройство Microsoft® Windows®: Microsoft Windows ServerTM 2003, Windows XP и Windows 2000 по Марк Э. Руссинович, Дэвид А. Соломон.

Ядро Windows сканирует параметры загрузки в поисках переключателей безопасного режима на ранних этапах загрузки и устанавливает внутреннюю переменную. InitSafeBootMode до значения, отражающего переключатели, найденные ядром. Ядро пишет InitSafeBootMode значение для значения реестра HKLM \ SYSTEM \ CurrentControlSet \ SafeBoot \ Option \ Option Значение чтобы компоненты пользовательского режима, такие как SCM, могли определять, в каком режиме загрузки находится система.

Возьмите вышеуказанное и соедините с нижеследующим, и у вас будет место в реестре, которое вы можете проверить с помощью числового значения, которое вы можете перевести во что-то полезное.

Из базы знаний support.microsoft под заголовком «Как определить, работает ли система в безопасном режиме с помощью драйвера устройства».

Ядро ОС Windows экспортирует указатель на переменную ULONG с именем InitSafeBootMode. Эта переменная содержит настройки безопасного режима.

Драйвер устройства может определить, работает ли система в безопасном режиме, по значению переменной InitSafeBootMode. Значение 0 означает, что система не работает в безопасном режиме.

В следующей таблице перечислены режимы для других значений.
Стоимость Режим
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
* Примечание. Значение 3 применяется только к контроллерам домена Windows.

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions содержит строку, и если вы находитесь в безопасном режиме, появится сообщение «SAFEBOOT: ???» внутри строки где ??? МИНИМАЛЬНОЕ или СЕТЕВОЕ. Он обновляется при каждой загрузке.