アップデート後にセーフモードで再起動するWindowsサーバーがあります。私はその問題に取り組んでいますが、本当に知りたいのは、Windowsがセーフモードで実行されているかどうかを確認する方法です。
理想的には、ステータスと一緒にNagiosボックスにパッシブチェックを送信するスクリプトにそれを組み込みたいと思います。
コマンドラインからこの情報を取得するために使用できる環境変数はありますか?
これはあなたが探しているものだと思います
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
可能な戻り値:
通常のブート フェイルセーフブート ネットワークブートによるフェイルセーフ
この記事 によると、システムがセーフモードまたはセーフモードで起動されている場合、SAFEBOOT_OPTION
という環境変数はMinimal
またはNetwork
に設定されます。ネットワーキングで;それ以外の場合、変数は設定されません。
変数の値をテストすることでうまくいくはずです。ただし、システムが実際にセーフモードで実行されている場合、そもそもネットワーキングがないため、そのステータスを報告することは困難な場合があることに注意してください。
PowerShellを使用していない場合は、コマンドラインから Craig62 で提案されたWMIクエリを直接実行することもできます。
> wmic COMPUTERSYSTEM GET BootupState
BootupState
Normal boot
編集:私の悪い、私はそれ自体は基本的に答えとして役に立たないことを理解するのに十分なほど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ドメインコントローラーにのみ適用されます。
HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptionsには文字列が含まれており、セーフモードの場合は「SAFEBOOT:???」が表示されます文字列内で??? MINIMALまたはNETWORKです。これは、起動するたびに更新されます。