У меня есть сервер 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, могли определять, в каком режиме загрузки находится система.
Возьмите вышеуказанное и соедините с нижеследующим, и у вас будет место в реестре, которое вы можете проверить с помощью числового значения, которое вы можете перевести во что-то полезное.
Ядро ОС Windows экспортирует указатель на переменную ULONG с именем InitSafeBootMode. Эта переменная содержит настройки безопасного режима.
Драйвер устройства может определить, работает ли система в безопасном режиме, по значению переменной InitSafeBootMode. Значение 0 означает, что система не работает в безопасном режиме.
В следующей таблице перечислены режимы для других значений.
Стоимость Режим
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
* Примечание. Значение 3 применяется только к контроллерам домена Windows.
HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions содержит строку, и если вы находитесь в безопасном режиме, появится сообщение «SAFEBOOT: ???» внутри строки где ??? МИНИМАЛЬНОЕ или СЕТЕВОЕ. Он обновляется при каждой загрузке.