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


14

我有一台Windows服务器,有时更新后有时会重新引导到安全模式。我正在解决该问题,但我真正想知道的是如何检查Windows是否以安全模式运行。

理想情况下,我想将其合并到一个脚本中,该脚本会将状态显示为被动检查发送到我们的Nagios框中。

是否可以使用某些环境变量或通过命令行获取此信息的某种方式?


1
Windows上没有“单一用户模式” ...您是在谈论安全模式吗?
Massimo

1
更新了问题,并将“单用户模式”更改为“安全模式”-我很抱歉
2012年

这个问题实际上很有趣,我在Google上搜索了一下,找不到任何合理的方式(例如,“没有设备驱动程序”)以编程方式检查系统是否在安全模式下运行...我赞成,但请不要接受@joeqwerty的回答,因为他在谈论终端服务。
Massimo

3
您这样做完全错误。如果您的服务器有时会启动到安全模式,则应该寻找根本原因,而不是治疗症状的方法。服务器仅在严重崩溃后才能执行此操作。找出导致崩溃的原因并进行修复。
约翰·加迪尼尔

2
@JohnGardeniers,老实说,他他正在研究这个问题……
Massimo

Answers:



8

根据本文,环境变量SAFEBOOT_OPTION被设置为,Minimal或者Network系统是在安全模式下启动还是在网络安全模式下启动?否则,该变量未设置。

测试变量的值应该可以解决问题。但是,请记住,如果系统实际上以安全模式运行,则开始时将没有网络连接,因此报告其状态可能会很困难。


在快速安全模式下重启也确认了这一点。
马西莫(Massimo)2012年

3

编辑:不好意思,我没有充分地阅读过知识库,以至于意识到它本身对回答几乎毫无用处。

一个更有效的方法来确定,如果你在不安全模式是Microsoft® Windows® Internals: Microsoft Windows ServerTM 2003, Windows XP, and Windows 2000马克E. Russinovich介绍,大卫·所罗门

Windows内核会在引导过程中尽早扫描引导参数以搜索安全模式开关,并将内部变量InitSafeBootMode设置为一个反映内核找到的开关的值。内核将InitSafeBootMode值写入注册表值HKLM \ SYSTEM \ CurrentControlSet \ SafeBoot \ Option \ Option值,以便用户模式组件(例如SCM)可以确定系统所处的启动模式。

将上面的内容与下面的内容配对,您将拥有一个注册表位置,可以使用数字值进行检查,并将其转换为有用的值。

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

Windows OS内核导出一个指向名为InitSafeBootMode的ULONG变量的指针。此变量包含安全模式设置。

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

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


通过命令行进行任何检查的方法,还是需要编写可以检查的应用程序InitSafeBootMode
cwd 2012年

这就是我指的是我的意见:“我找不到任何合理的方式” ......即使你可以写一个设备驱动程序来检查,得到它在目标系统上运行会相当棘手。
马西莫

@cwd实际上,您将需要一个内核模式驱动程序。并安装它。甚至可以在安全模式下运行。然后是一个与驾驶员交谈并报告其状态的应用程序。这将很快变得非常丑陋。
马西莫(Massimo)2012年

1
@cwd在那里,当我找到指向KB的链接时没有仔细检查。答案现在应该包含对您有用的信息。
HopelessN00b 2012年

@ HopelessN00b确认(我实际上以安全模式重新启动以进行检查)。该密钥HKLM\SYSTEM\CurrentControlSet\SafeBoot\Option在非安全模式系统上根本不存在,但是在安全模式下却存在。
马西莫(Massimo)2012年

3

如果您未使用PowerShell,也可以直接从命令行运行Craig620建议的WMI查询:

> wmic COMPUTERSYSTEM GET BootupState

BootupState
Normal boot

1

HKLM \ SYSTEM \ CurrentControlSet \ Control \ SystemStartOptions包含一个字符串,如果您处于安全模式,则将出现“ SAFEBOOT:???”。在字符串中?是最小或网络。每次启动时都会更新。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.