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


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

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

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


12
2017-10-01 18:58


Источник


В Windows нет режима «одного пользователя» ... вы говорите о безопасном режиме? - Massimo
обновил вопрос и изменил режим «одного пользователя» на «безопасный режим» - мои извинения - cwd
Вопрос на самом деле интересен, я немного искал Google и не мог найти разумного способа (как, например, «не будучи драйвером устройства»), чтобы программно проверить, работает ли система в безопасном режиме ... Я поддерживаю, но, пожалуйста, не соглашайтесь с ответом @ joeqwerty, поскольку он говорил о Terminal Services. - Massimo
Вы делаете это совершенно неправильно. Если у вас есть сервер, который иногда загружается в безопасный режим, вы должны искать первопричину, а не способ лечения симптома. Сервер будет делать это только после серьезного сбоя. Узнайте, что вызывает аварии и исправить. - John Gardeniers
@JohnGardeniers, если честно, он сказал он работает над этим вопросом ... - Massimo


Ответы:


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

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

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

Обычная загрузка
Безопасная загрузка
Сбой при загрузке сети

21
2017-10-01 19:53



Niiiiiiiiice ... - Massimo
Перефразируй: (gwmi win32_computersystem -Property BootupState).BootupState - Jaykul


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

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


8
2017-10-01 19:43



Это подтвердилось и в быстрой перезагрузке в безопасном режиме. - Massimo


EDIT: мой плохой, я недостаточно читал КВ, чтобы понять, что это бесполезно, как ответ сам по себе.

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

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

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

Из файла поддержки.microsoft KB под названием «Как определить, работает ли система в безопасном режиме от драйвера устройства».

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

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

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


3
2017-10-01 19:24



Любой способ проверить это через командную строку или мне нужно будет написать приложение, которое может проверять InitSafeBootMode ? - cwd
Вот что я имел в виду с моим комментарием «Я не мог найти разумного пути» ... даже если бы вы могли написать драйвер устройства, чтобы проверить, чтобы его запуск в целевой системе был бы довольно сложно. - Massimo
@cwd Вам действительно нужен драйвер режима ядра. И чтобы он был установлен. И работает даже в безопасном режиме. А затем приложение, чтобы поговорить с драйвером и сообщить о его статусе. Это было бы очень уродливо очень быстро. - Massimo
@ Массимо - ах. Попался. Спасибо за разработку. - cwd
@cwd там вы идете, не проверял достаточно близко, когда я нашел ссылку на КБ. Ответ должен содержать полезную информацию для вас сейчас. - HopelessN00b


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

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

3
2017-10-01 20:31