Windows가 안전 모드에서 실행 중인지 어떻게 알 수 있습니까?


14

업데이트 후 때로는 안전 모드로 재부팅되는 Windows 서버가 있습니다. 나는이 문제에 대해 노력하고 있지만 실제로 알고 싶은 것은 Windows가 안전 모드에서 실행 중인지 확인하는 방법입니다.

이상적으로 상태를 사용하여 Nagios 상자에 수동 검사를 보내는 스크립트에 통합하고 싶습니다.

명령 줄을 통해이 정보를 얻을 수있는 환경 변수 나 방법이 있습니까?


1
Windows에는 "단일 사용자 모드"가 없습니다 ... 안전 모드에 대해 이야기하고 있습니까?
Massimo

1
질문을 업데이트하고 "단일 사용자 모드"를 "안전 모드"로 변경했습니다. – 사과
cwd

문제는 실제로 흥미 롭습니다. 약간 구글을 검색했으며 시스템이 안전 모드에서 실행 중인지 프로그래밍 방식으로 확인하는 합리적인 방법을 찾을 수 없었습니다 ( "장치 드라이버없이"). 그러나 터미널 서비스에 대해 이야기하면서 @joeqwerty의 답변을 수락하지 마십시오.
Massimo

3
당신은 이것을 완전히 잘못하고 있습니다. 때때로 안전 모드로 부팅되는 서버가있는 경우 증상을 치료할 수있는 방법이 아닌 근본 원인을 찾아야합니다. 서버는 심각한 충돌 이후에만이를 수행합니다. 충돌의 원인을 찾아서 수정하십시오.
John Gardeniers

2
@JohnGardeniers, 솔직히 말해서, 그는 이 문제에 대해 작업하고 있다고 말했습니다 .
Massimo

답변:


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 ...
Massimo

다른 방법으로 넣으십시오. (gwmi win32_computersystem -Property BootupState).BootupState
Jaykul

8

에 따르면 이 문서 ,라는 환경 변수 SAFEBOOT_OPTION로 설정하거나 Minimal또는 Network시스템이 안전 모드 또는 안전 모드 (네트워킹 사용)에서 시작되는 경우; 그렇지 않으면 변수가 설정 해제됩니다.

변수 값에 대한 테스트는 트릭을 수행해야합니다. 그러나 시스템이 실제로 안전 모드에서 실행중인 경우에는 네트워킹이 없으므로 상태를보고하기가 어려울 수 있습니다.


빠른 안전 모드 재부팅에서도이를 확인했습니다.
Massimo

3

편집 : 내 나쁜, 나는 기본적으로 자체적으로 대답으로 쓸모가 없다는 것을 깨달을 정도로 KB를 충분히 읽지 못했습니다.

당신이에서하지의 안전 모드에 있다면 더 유용한 방법이 결정 : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000에 의해 마크 E. Russinovich가, 데이비드 A. 솔로몬 .

Windows 커널은 부팅 중에 초기에 안전 모드 스위치를 찾기 위해 부팅 매개 변수를 검색하고 내부 변수 InitSafeBootMode 를 커널이 찾은 스위치를 반영하는 값으로 설정합니다 . 커널은 InitSafeBootMode 값을 레지스트리 값 HKLM \ SYSTEM \ CurrentControlSet \ SafeBoot \ Option \ Option Value에 기록 하여 SCM과 같은 사용자 모드 구성 요소가 시스템의 부팅 모드를 결정할 수 있도록합니다.

위를 가져 와서 아래와 쌍을 이루면 레지스트리 값을 사용하여 유용한 것으로 변환 할 수있는 숫자 값을 확인할 수 있습니다.

support.microsoft KB에서 "시스템이 장치 드라이버에서 안전 모드로 실행되고 있는지 확인하는 방법"

Windows OS 커널은 InitSafeBootMode라는 ULONG 변수에 대한 포인터를 내 보냅니다. 이 변수는 안전 모드 설정을 포함합니다.

장치 드라이버는 InitSafeBootMode 변수 값으로 시스템이 안전 모드에서 실행 중인지 확인할 수 있습니다. 값이 0이면 시스템이 안전 모드에서 실행되고 있지 않은 것입니다.

다음 표는 다른 값의 모드를 보여줍니다.
모드
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
* 참고 3의 값은 Windows 도메인 컨트롤러에만 적용됩니다.


명령 줄을 통해 이것을 확인하는 방법이나 확인할 수있는 응용 프로그램을 작성해야 InitSafeBootMode합니까?
cwd

그것이 내가 "적당한 방법을 찾을 수 없었습니다"라는 내 의견으로 언급 한 것입니다. 확인하기 위해 장치 드라이버를 작성할 수 있다고해도 대상 시스템에서 실행하는 것은 매우 까다로운 일입니다.
Massimo

@cwd 실제로 커널 모드 드라이버가 필요합니다. 그리고 그것을 설치하십시오. 안전 모드에서도 실행됩니다. 그런 다음 응용 프로그램이 드라이버와 대화하고 상태를보고합니다. 이것은 정말 못 생겼다.
Massimo

1
@cwd가 있습니다 .KB에 대한 링크를 찾을 때 충분히 확인하지 않았습니다. 답변에는 유용한 정보가 포함되어 있어야합니다.
HopelessN00b

@ HopelessN00b Confirmed (실제로 안전 모드에서 재부팅하여 확인했습니다). 키 HKLM\SYSTEM\CurrentControlSet\SafeBoot\Option는 안전 모드가 아닌 시스템에는 전혀 존재하지 않지만 안전 모드에는 존재하지 않습니다.
Massimo

3

PowerShell을 사용하지 않는 경우 명령 줄에서 Craig620이 제안한 WMI 쿼리를 직접 실행할 수도 있습니다 .

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

1

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions에 문자열이 포함되어 있으며 안전 모드 인 경우 "SAFEBOOT : ???"가 표시됩니다. 문자열 내에서 ??? 최소 또는 네트워크입니다. 이것은 부팅 할 때마다 업데이트됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.