web-dev-qa-db-ja.com

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

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

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

コマンドラインからこの情報を取得するために使用できる環境変数はありますか?

14
cwd

これはあなたが探しているものだと思います

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

可能な戻り値:

通常のブート
フェイルセーフブート
ネットワークブートによるフェイルセーフ
24
Clayton

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

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

9
Massimo

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

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot
4
Massimo

編集:私の悪い、私はそれ自体は基本的に答えとして役に立たないことを理解するのに十分なほどKBを十分に読みませんでした。

セーフモードではないかどうかを判断するためのより便利な方法は、次のものです : Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000Mark E. Russinovich、David A. Solomon

Windowsカーネルは、ブート中にセーフモードスイッチを検索してブートパラメータをスキャンし、内部変数InitSafeBootModeを、カーネルが検出したスイッチを反映する値に設定します。カーネルはInitSafeBootMode値をレジストリ値HKLM\SYSTEM\CurrentControlSet\SafeBoot\Option\Option ValueSCMなどのユーザーモードコンポーネントが、システムのブートモードを判別できるようにします。

上記を参考にして、以下と組み合わせてください。レジストリの場所がわかり、数値で確認できるので、便利なものに変換できます。

サポートから。MicrosoftKB、「システムがデバイスドライバーからセーフモードで実行されているかどうかを確認する方法」

Windows OSカーネルは、InitSafeBootModeという名前のULONG変数へのポインターをエクスポートします。この変数には、セーフモード設定が含まれています。

デバイスドライバーは、InitSafeBootMode変数の値によって、システムがセーフモードで実行されているかどうかを判断できます。値0は、システムがセーフモードで実行されていないことを意味します。

次の表に、他の値のモードを示します。
モード
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
*注値3は、Windowsドメインコントローラーにのみ適用されます。

3
HopelessN00b

HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptionsには文字列が含まれており、セーフモードの場合は「SAFEBOOT:???」が表示されます文字列内で??? MINIMALまたはNETWORKです。これは、起動するたびに更新されます。

1
Allan