Làm cách nào để biết Windows đang chạy ở Chế độ an toàn?


14

Tôi có một máy chủ Windows đôi khi sẽ khởi động lại vào chế độ an toàn sau khi cập nhật. Tôi đang làm việc về vấn đề đó nhưng điều tôi thực sự muốn biết là làm thế nào tôi có thể kiểm tra xem Windows có chạy ở chế độ an toàn hay không.

Lý tưởng nhất là tôi muốn kết hợp nó vào một kịch bản sẽ gửi một kiểm tra thụ động đến hộp Nagios của chúng tôi với trạng thái.

Có một số biến môi trường tôi có thể sử dụng hoặc một số cách để có được thông tin này thông qua dòng lệnh?


1
Không có "chế độ người dùng đơn" trên Windows ... bạn đang nói về Chế độ an toàn phải không?
Massimo

1
cập nhật câu hỏi và thay đổi "chế độ người dùng đơn" thành "chế độ an toàn" - lời xin lỗi của tôi
cwd

Câu hỏi thực sự thú vị, tôi đã loay hoay một chút và không thể tìm thấy bất kỳ cách hợp lý nào (như, "không phải là trình điều khiển thiết bị") để kiểm tra theo chương trình nếu một hệ thống đang chạy ở chế độ an toàn ... Tôi đang nâng cấp, nhưng xin vui lòng không chấp nhận câu trả lời của @ joeqwerty, vì anh ta đang nói về Terminal Services.
Massimo

3
Bạn đang làm điều này hoàn toàn sai. Nếu bạn có một máy chủ đôi khi khởi động vào chế độ an toàn, bạn nên tìm kiếm nguyên nhân gốc rễ, không phải là cách để điều trị triệu chứng. Máy chủ sẽ chỉ làm điều đó sau một sự cố nghiêm trọng. Tìm hiểu những gì gây ra sự cố và khắc phục nó.
John Gardeniers

2
@JohnGardeniers, thành thật mà nói , anh ấy nói rằng anh ấy đang giải quyết vấn đề này ...
Massimo

Câu trả lời:


23

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm

PS C:\> gwmi win32_computersystem | select BootupState

BootupState
-----------
Normal boot

http://msdn.microsoft.com/en-us/l Library / windows / desktop / aa394102% 28v = vs85% 29.aspx

Giá trị trả về có thể:

Khởi động bình thường
Khởi động không an toàn
Không an toàn với khởi động mạng

Niiiiiiiiice ...
Massimo

Nói cách khác: (gwmi win32_computersystem -Property BootupState).BootupState
Jaykul

8

Theo bài viết này , một biến môi trường được gọi SAFEBOOT_OPTIONlà được đặt thành Minimalhoặc Networknếu hệ thống được khởi động ở Chế độ an toàn hoặc ở Chế độ an toàn với mạng; mặt khác, biến không được đặt.

Một thử nghiệm về giá trị của biến nên thực hiện thủ thuật; tuy nhiên, hãy nhớ rằng nếu hệ thống thực sự đang chạy ở Chế độ an toàn, thì nó sẽ không có kết nối mạng, vì vậy việc báo cáo trạng thái của nó có thể ... khó khăn.


Xác nhận điều này trong khởi động lại Chế độ an toàn nhanh chóng.
Massimo

3

EDIT: xấu của tôi, tôi đã không đọc KB đủ để nhận ra rằng về cơ bản nó vô dụng như một câu trả lời.

Một cách hữu ích hơn để xác định xem bạn có ở chế độ an toàn không là từ : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000của Mark E. Russinovich, David A. Solomon .

Hạt nhân Windows quét các tham số khởi động để tìm kiếm các công tắc chế độ an toàn sớm trong quá trình khởi động và đặt biến bên trong initSafeBootMode thành một giá trị phản ánh các công tắc mà nhân tìm thấy. Hạt nhân ghi giá trị initSafeBootMode vào giá trị đăng ký HKLM \ HỆ THỐNG \ CurrentControlSet \ SafeBoot \ Option \ Option Giá trị để các thành phần chế độ người dùng, như SCM, có thể xác định chế độ khởi động của hệ thống.

Lấy phần trên và ghép với phần bên dưới, và bạn sẽ có một vị trí đăng ký mà bạn có thể kiểm tra với một giá trị số bạn có thể dịch thành thứ gì đó hữu ích.

Từ KB support.microsoft có tiêu đề, "Cách xác định xem hệ thống có chạy ở Chế độ an toàn từ trình điều khiển thiết bị hay không."

Nhân hệ điều hành Windows xuất con trỏ sang biến ULONG có tên là initSafeBootMode. Biến này chứa các cài đặt Chế độ an toàn.

Trình điều khiển thiết bị có thể xác định xem hệ thống có đang chạy ở Chế độ an toàn hay không bằng giá trị của biến initSafeBootMode. Giá trị 0 nghĩa là hệ thống không chạy ở Chế độ an toàn.

Bảng sau liệt kê các chế độ cho các giá trị khác. Chế độ
giá trị 1 SAFEBOOT_MINIMAL 2 SAFEBOOT_NETWORK 3 * SAFEBOOT_DSREPAIR * Lưu ý Giá trị 3 chỉ áp dụng cho bộ điều khiển miền Windows.




Bất kỳ cách nào để kiểm tra điều này thông qua dòng lệnh hoặc tôi sẽ cần phải viết một ứng dụng có thể kiểm tra InitSafeBootMode?
cwd

Đó là những gì tôi đã đề cập với nhận xét của mình "Tôi không thể tìm thấy bất kỳ cách hợp lý nào" ... ngay cả khi bạn có thể viết trình điều khiển thiết bị để kiểm tra điều đó, để nó chạy trên hệ thống đích sẽ khá khó khăn.
Massimo

@cwd Bạn thực sự sẽ cần một trình điều khiển chế độ kernel. Và để cài đặt nó. Và chạy ngay cả trong chế độ an toàn. Và sau đó một ứng dụng để nói chuyện với trình điều khiển và báo cáo tình trạng của nó. Điều này sẽ nhận được thực sự xấu xí thực sự nhanh chóng.
Massimo

1
@cwd bạn đến đó, đã không kiểm tra đủ chặt chẽ khi tôi tìm thấy liên kết đến KB. Câu trả lời nên chứa thông tin hữu ích cho bạn bây giờ.
HoplessN00b

@ HoplessN00b Xác nhận (Tôi thực sự đã khởi động lại ở Chế độ an toàn để kiểm tra). Khóa HKLM\SYSTEM\CurrentControlSet\SafeBoot\Optionnày hoàn toàn không tồn tại trên hệ thống Không an toàn, nhưng nó không tồn tại ở chế độ An toàn.
Massimo

3

Bạn cũng có thể chạy truy vấn WMI được đề xuất bởi Craig620 trực tiếp từ dòng lệnh, nếu bạn không sử dụng PowerShell:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

1

HKLM \ HỆ THỐNG \ CurrentControlset \ Control \ SystemStartOptions chứa một chuỗi và nếu bạn ở chế độ an toàn sẽ có "SAFEBOOT: ???" Trong chuỗi đâu ??? là TỐI THIỂU hoặc MẠNG. Điều này được cập nhật trên mỗi khởi động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.