Bagaimana saya bisa tahu jika Windows sedang berjalan dalam Safe Mode?

14

Saya memiliki server Windows yang kadang-kadang akan reboot ke mode aman setelah pembaruan. Saya sedang mengerjakan masalah itu tetapi yang benar-benar ingin saya ketahui adalah bagaimana saya dapat memeriksa untuk melihat apakah Windows berjalan dalam mode aman atau tidak.

Idealnya saya ingin memasukkannya ke dalam skrip yang akan mengirim cek pasif ke kotak Nagios kami dengan status.

Apakah ada beberapa variabel lingkungan yang dapat saya gunakan atau beberapa cara untuk mendapatkan informasi ini melalui baris perintah?

cwd
sumber
1
Tidak ada "mode pengguna tunggal" pada Windows ... apakah Anda berbicara tentang Safe Mode?
Massimo
1
memperbarui pertanyaan dan mengubah "mode pengguna tunggal" menjadi "mode aman" - permintaan maaf saya
cwd
Pertanyaannya sebenarnya menarik, saya mencari di sekitar sedikit dan tidak dapat menemukan cara yang masuk akal (seperti, "tanpa menjadi driver perangkat") untuk memeriksa secara terprogram apakah suatu sistem berjalan dalam mode aman ... Saya upvoting, tapi tolong tidak terima jawaban @ joeqwerty, karena dia berbicara tentang Layanan Terminal.
Massimo
3
Anda melakukan ini sepenuhnya salah. Jika Anda memiliki server yang kadang-kadang melakukan boot ke mode aman, Anda harus mencari penyebab root, bukan cara untuk mengobati gejalanya. Server hanya akan melakukan itu setelah crash parah. Cari tahu apa yang menyebabkan crash dan perbaiki.
John Gardeniers
2
@JohnGardeniers, jujur ​​saja, dia bilang dia sedang mengerjakan masalah ini ...
Massimo

Jawaban:

23

Saya pikir ini melakukan apa yang Anda cari

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

Nilai pengembalian yang dimungkinkan:

Boot normal
Boot gagal-aman
Aman gagal dengan boot jaringan
Clayton
sumber
Niiiiiiiiice ...
Massimo
Dengan kata lain: (gwmi win32_computersystem -Property BootupState).BootupState
Jaykul
8

Menurut artikel ini , variabel lingkungan yang dipanggil SAFEBOOT_OPTIONdiatur ke salah satu Minimalatau Networkjika sistem dimulai pada Mode Aman atau Mode Aman dengan Jaringan; jika tidak, variabel tidak disetel.

Tes pada nilai variabel harus melakukan trik; Namun, perlu diingat bahwa jika sistem benar-benar berjalan dalam Safe Mode, itu tidak akan memiliki jaringan untuk memulai, sehingga melaporkan statusnya bisa ... sulit.

Massimo
sumber
Mengonfirmasi ini dalam reboot Safe Mode cepat juga.
Massimo
3

EDIT: saya salah, saya tidak membaca KB cukup menyeluruh untuk menyadari itu pada dasarnya tidak berguna sebagai jawaban sendiri.

Cara yang lebih berguna untuk menentukan apakah Anda dalam safe mode of not adalah dari : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000oleh Mark E. Russinovich, David A. Solomon .

Kernel Windows memindai parameter boot untuk mencari safe-mode switch lebih awal selama boot dan menetapkan variabel internal InitSafeBootMode ke nilai yang mencerminkan switch yang ditemukan kernel. Kernel menulis nilai InitSafeBootMode ke nilai registri HKLM \ SYSTEM \ CurrentControlSet \ SafeBoot \ Option \ Nilai Nilai sehingga komponen mode pengguna, seperti SCM, dapat menentukan mode boot apa sistem ini berada.

Ambil yang di atas dan pasangkan dengan yang di bawah ini, dan Anda akan memiliki lokasi registri yang dapat Anda periksa dengan nilai numerik yang dapat Anda terjemahkan menjadi sesuatu yang bermanfaat.

Dari support.microsoft KB berjudul, "Cara menentukan apakah sistem berjalan dalam Mode Aman dari driver perangkat."

Kernel Windows OS mengekspor pointer ke variabel ULONG yang bernama InitSafeBootMode. Variabel ini berisi pengaturan Safe Mode.

Driver perangkat dapat menentukan apakah sistem berjalan dalam Mode Aman dengan nilai variabel InitSafeBootMode. Nilai 0 berarti sistem tidak berjalan dalam Safe Mode.

Tabel berikut mencantumkan mode untuk nilai lainnya. Mode
Nilai 1 SAFEBOOT_MINIMAL 2 SAFEBOOT_NETWORK 3 * SAFEBOOT_DSREPAIR * Catatan Nilai 3 hanya berlaku untuk pengontrol domain Windows saja.



HopelessN00b
sumber
Adakah cara untuk memeriksa ini melalui baris perintah atau apakah saya perlu menulis aplikasi yang dapat memeriksa InitSafeBootMode?
cwd
Itulah yang saya maksud dengan komentar saya "Saya tidak bisa menemukan cara yang masuk akal" ... bahkan jika Anda bisa menulis driver perangkat untuk memeriksa itu, menjalankannya pada sistem target akan sangat sulit.
Massimo
@ cwd Anda sebenarnya membutuhkan driver mode kernel. Dan untuk menginstalnya. Dan berjalan bahkan dalam mode aman. Dan kemudian aplikasi untuk berbicara dengan pengemudi dan melaporkan statusnya. Ini akan menjadi sangat jelek dengan sangat cepat.
Massimo
1
@ cwd begitulah, tidak cukup memeriksa ketika saya menemukan tautan ke KB. Jawaban harus berisi informasi yang berguna untuk Anda sekarang.
Putus asaN00b
@ HopelessN00b Dikonfirmasi (Saya benar-benar mem-boot ulang dalam Safe Mode untuk memeriksa). Kuncinya sama HKLM\SYSTEM\CurrentControlSet\SafeBoot\Optionsekali tidak ada pada sistem Mode Non-Aman, tetapi ada pada Mode Aman.
Massimo
3

Anda juga dapat menjalankan kueri WMI yang disarankan oleh Craig620 langsung dari baris perintah, jika Anda tidak menggunakan PowerShell:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot
Massimo
sumber
1

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions berisi string dan jika Anda dalam mode aman akan ada "SAFEBOOT: ???" dalam string mana ??? adalah MINIMAL atau JARINGAN. Ini diperbarui pada setiap boot.

Allan
sumber