Як я можу визначити, чи працює Windows у безпечному режимі?


14

У мене є сервер Windows, який інколи перезавантажується в безпечний режим після оновлень. Я працюю над цим питанням, але те, що я дуже хотів би знати, - як я можу перевірити, чи працює Windows у безпечному режимі чи ні.

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

Чи є якась змінна середовище, яку я можу використати, або іншим способом отримати цю інформацію за допомогою командного рядка?


1
У Windows немає "єдиного користувальницького режиму" ... Ви говорите про безпечний режим?
Массімо

1
оновлено запитання та змінив режим "єдиний користувач" на "безпечний режим" - мої вибачення
cwd

Питання насправді цікаве, я трохи погукав і не зміг знайти розумного способу (як, наприклад, "без драйвера пристрою"), щоб програмно перевірити, чи працює система в безпечному режимі ... але будь ласка, не приймайте відповідь @ joeqwerty, оскільки він говорив про служби терміналів.
Массімо

3
Ви робите це зовсім неправильно. Якщо у вас є сервер, який іноді переходить у безпечний режим, вам слід шукати першопричину, а не спосіб лікування симптому. Сервер зробить це лише після сильної аварії. Дізнайтеся, що викликає збої, і виправте це.
Джон Гарденєр

2
@JohnGardeniers, якщо чесно, він сказав, що він працює над проблемою ...
Массімо

Відповіді:


23

Я думаю, що це робить те, що ти шукаєш

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

Можливі значення повернення:

Нормальний черевик
Захищеність відмови
Надійний з мережевим завантаженням

Niiiiiiiiice ...
Массімо

По-іншому: (gwmi win32_computersystem -Property BootupState).BootupState
Джейкуль

8

Згідно з цією статтею , змінна середовище, яка називається SAFEBOOT_OPTION, встановлюється Minimalабо Networkякщо система запускається в безпечному режимі, або в безпечному режимі з мережею; в іншому випадку змінна не встановлена.

Тест на значення змінної повинен зробити трюк; проте майте на увазі, що якщо система насправді працює в безпечному режимі, вона не матиме жодних мереж для початку, тому повідомити про її стан може бути ... складно.


Підтверджено це також у швидкому перезавантаженні безпечного режиму.
Массімо

3

EDIT: моє погано, я не прочитав КБ досить грунтовно, щоб зрозуміти, що це в основному марно як відповідь самостійно.

Більш корисний спосіб визначити , якщо ви перебуваєте в безпечному режимі не з : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000від Mark E. Руссиновича, Девід А. Соломона .

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

Візьміть вищезгадане та з’єднайте із наведеним нижче, і у вас буде місцезнаходження реєстру, яке ви можете перевірити, чисельне значення ви можете перевести на щось корисне.

З support.microsoft KB під назвою "Як визначити, чи працює система в безпечному режимі від драйвера пристрою".

Ядро ОС Windows експортує вказівник на змінну ULONG, яка називається InitSafeBootMode. Ця змінна містить налаштування безпечного режиму.

Драйвер пристрою може визначити, чи працює система в безпечному режимі за значенням змінної InitSafeBootMode. Значення 0 означає, що система не працює в безпечному режимі.

У наступній таблиці перераховані режими для інших значень. Режим
значення 1 SAFEBOOT_MINIMAL 2 SAFEBOOT_NETWORK 3 * SAFEBOOT_DSREPAIR * Примітка. Значення 3 стосується лише контролерів домену Windows.




Будь-який спосіб перевірити це за допомогою командного рядка чи мені потрібно написати програму, яка могла б перевірити InitSafeBootMode?
cwd

Це те, про що я мав на увазі свій коментар "Я не міг знайти розумного способу" ... навіть якщо ви можете написати драйвер пристрою, щоб перевірити це, заставити його працювати на цільовій системі було б досить складно.
Массімо

@cwd Насправді вам потрібен драйвер режиму ядра. І щоб його встановити. І працює навіть у безпечному режимі. А потім додаток поговорити з водієм та повідомити про його стан. Це вийшло б дуже потворно дійсно швидко.
Массімо

1
@cwd туди ти не перевірив достатньо уважно, коли знайшов посилання на КБ. Відповідь має містити корисну для вас інформацію зараз.
HopelessN00b

@ HopelessN00b підтверджено (я фактично перезавантажився в безпечному режимі, щоб перевірити). Ключ HKLM\SYSTEM\CurrentControlSet\SafeBoot\Optionвзагалі не існує в системі, що не працює в безпечному режимі, але в безпечному режимі.
Массімо

3

Ви також можете запустити WMI-запит, запропонований Craig620, безпосередньо з командного рядка, якщо ви не використовуєте PowerShell:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

1

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions містить рядок, і якщо ви перебуваєте в безпечному режимі, з'явиться "SAFEBOOT: ???" в рядку де ??? - МІНІМАЛЬНА або МЕРЕЖА. Це оновлюється при кожному завантаженні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.