我正在 SecurityCenter2 上查询 WMI 中的 “SELECT * FROM AntivirusProduct”(我目前使用的是 Windows 7)。
我很难找到 productState 上的数字的含义,包括反间谍软件和防火墙。那里有这方面的参考吗?我想确保我可以在任何 Vista 或 7 机器上获得正确的产品状态(以防这些数字因机器而异)。
对于其他人来说,我发现当转换为十六进制时,第三个字符非常可靠地指示是否启用了任何特定的防病毒产品。 (1 = 启用,0 = 禁用)
这是我编写的 PowerShell 语句,用于确定 Windows Defender 是否已启用。您可以替换该字符串以匹配您想要的任何防病毒产品。
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct | ForEach-Object {if($($_.displayName) -eq "Windows Defender"){if("$($([Convert]::ToString($($_.productState), 16)).PadLeft(6,""0""))".Substring(2,1) -eq "1"){Write-Host "Windows Defender is Enabled"}else{Write-Host "Windows Defender is Disabled"}}}
我不能肯定地说每个防病毒产品都正确报告其产品状态,但我想所有主流产品都必须如此。我可以确认这也适用于 Symantec Endpoint Protection。
productState
值似乎是一个位集,除非通过与 Microsoft 签订 NDA,否则没有记录。应该可以映射随安装的产品返回的值及其状态。您可以安装单个 AV 产品,记录其状态,然后使其病毒定义过期,然后检查值如何变化。似乎有一组有限的典型值。
参考:https://bigfix.me/analysis/details/2998358
以下是我从 10000 多个端点的 34 种不同 AV 产品中找到的
productState
值,这些值可以帮助逆向工程其含义:
(十进制、十六进制、位集)
我的一位朋友进一步了解了此信息,并发现位组的第 3 位代表 AV 定义是否已过时。
请参阅此处:https://www.bigfix.me/analysis/details/2998101?force=true