如何判断Windows是否以安全模式运行?

我有一个Windows服务器,有时会在更新后重新启动到安全模式。 我正在处理这个问题,但是我真正想知道的是如何检查Windows是否在安全模式下运行。

理想情况下,我想将其纳入一个脚本,将发送被动检查到我们的Nagios框与状态。

是否有一些环境variables可以使用或通过命令行获取这些信息?

我认为这是你正在寻找的

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

可能的返回值:

正常启动
失效保护启动
通过networking启动失效保护

根据这篇文章 ,如果系统以安全模式启动或者以networking安全模式启动,则称为SAFEBOOT_OPTION的环境variables设置为“ Minimal或“networking”; 否则,该variables是未设置的。

对variables的价值进行testing就可以了。 但是,请记住,如果系统实际上是以安全模式运行的,那么它就没有networking连接,因此报告其状态可能会很困难。

编辑:我的不好,我没有彻底读懂KB知道它基本上是无用的答案。

确定您是否处于非安全模式的更有用的方法是 : Microsoft®Windows®内部:Mark E. Russinovich,David A. Solomon提供的 Microsoft Windows ServerTM 2003,Windows XP和Windows 2000

Windows内核会在引导期间尽早扫描引导参数以search安全模式开关,并将内部variablesInitSafeBootMode设置为反映内核find的开关的值。 内核将InitSafeBootMode值写入registry值HKLM \ SYSTEM \ CurrentControlSet \ SafeBoot \ Option \ Option Value,以便用户模式组件(如SCM)可以确定系统所处的引导模式。

采取上述和下面的配对,你会有一个registry位置,你可以检查一个数值,你可以转化为有用的东西。

从support.microsoft KB标题为“如何确定系统是否以安全模式从设备驱动程序运行”。

Windows操作系统内核将一个指向名为InitSafeBootMode的ULONGvariables的指针导出。 该variables包含安全模式设置。

设备驱动程序可以通过InitSafeBootModevariables的值确定系统是否以安全模式运行。 值为0表示系统未在安全模式下运行。

下表列出了其他值的模式。
模式
1 SAFEBOOT_MINIMAL
2 SAFEBOOT_NETWORK
3 * SAFEBOOT_DSREPAIR
*注意3的值仅适用于Windows域控制器。

如果您不使用PowerShell,也可以直接从命令行运行由Craig620build议的WMI查询:

 > wmic COMPUTERSYSTEM GET BootupState BootupState Normal boot