Windowsがセーフモードで実行されているかどうかを確認するにはどうすればよいですか?


14

更新後にセーフモードで再起動することがあるWindowsサーバーがあります。私はその問題に取り組んでいますが、本当に知りたいのは、Windowsがセーフモードで実行されているかどうかを確認する方法です。

理想的には、状態とともにパッシブチェックをNagiosボックスに送信するスクリプトにそれを組み込みたいと思います。

私が使用できる環境変数や、コマンドラインからこの情報を取得する方法はありますか?


1
Windowsには「シングルユーザーモード」はありません...セーフモードについて話しているのですか?
マッシモ

1
質問を更新し、「シングルユーザーモード」を「セーフモード」に変更-謝罪
-cwd

質問は実際に興味深いもので、少しグーグルで調べて、システムがセーフモードで実行されているかどうかをプログラムで確認するための妥当な方法(「デバイスドライバーではない」など)を見つけることができませんでした。ただし、@ joeqwertyの答えは受け入れないでください。彼はターミナルサービスについて話していました。
マッシモ

3
あなたはこれを完全に間違っています。時々セーフモードで起動するサーバーがある場合は、症状を治療する方法ではなく、根本原因を探す必要があります。サーバーは、重大なクラッシュが発生した後にのみこれを行います。クラッシュの原因を調べて修正します。
ジョンガーデニアーズ

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

可能な戻り値:

普通のブーツ
フェイルセーフブート
ネットワークブートによるフェールセーフ

Niiii​​iiiiice ...
マッシモ

別の言い方をすると: (gwmi win32_computersystem -Property BootupState).BootupState
-Jaykul

8

よると、この記事で、という環境変数は、SAFEBOOT_OPTIONいずれかに設定されているMinimalか、Networkシステムがセーフモードでまたはセーフモードとネットワークで起動した場合、それ以外の場合、変数は設定されていません。

変数の値をテストすることでうまくいくはずです。ただし、システムが実際にセーフモードで実行されている場合、最初はネットワークが存在しないため、そのステータスを報告するのは困難です。


クイックセーフモードの再起動でもこれを確認しました。
マッシモ

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

「妥当な方法を見つけることができませんでした」というコメントで私が言及していました...それをチェックするデバイスドライバーを作成できたとしても、ターゲットシステムで実行するのは非常に難しいでしょう。
マッシモ

@cwd実際にはカーネルモードドライバーが必要です。そして、それをインストールします。セーフモードでも実行しています。そして、ドライバーと話し、そのステータスを報告するアプリケーション。これは本当にひどくquickいものになります。
マッシモ

1
@cwdそこに行くと、KBへのリンクを見つけたときに十分にチェックしていませんでした。回答には、あなたにとって役立つ情報が含まれているはずです。
HopelessN00b

@ HopelessN00bを確認しました(実際にセーフモードで再起動して確認しました)。キーHKLM\SYSTEM\CurrentControlSet\SafeBoot\Optionは非セーフモードシステムにはまったく存在しませんが、セーフモードシステムには存在します。
マッシモ

3

PowerShellを使用していない場合は、Craig620によって提案されたWMIクエリをコマンドラインから直接実行することもできます。

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

1

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptionsには文字列が含まれ、セーフモードの場合は「SAFEBOOT:???」が表示されます 文字列内で??? MINIMALまたはNETWORKです。これはブートごとに更新されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.