AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 12343
Accepted
NotMe
NotMe
Asked: 2009-05-27 11:37:42 +0800 CST2009-05-27 11:37:42 +0800 CST 2009-05-27 11:37:42 +0800 CST

如何确定是否安装了防病毒产品?

  • 772

我们拥有超过 15,000 台机器的大型装置。他们应该安装了趋势科技版本;但是,我们不确定。

这些都是 Windows 机器,包括具有各种 SP 级别的 XP、RTM 和 SP1 的 Vista,以及一些 2000 和 2003 服务器。

我如何确定:

  1. 是否安装了任何 AV 产品?
  2. 安装的是什么版本的产品?
  3. 包装盒上的模式文件是什么版本?

想法?

谢谢,

windows anti-virus
  • 7 7 个回答
  • 29428 Views

7 个回答

  • Voted
  1. Best Answer
    Roberto Selbach
    2009-05-28T04:29:01+08:002009-05-28T04:29:01+08:00

    由于您谈论的是 15,000 台主机,因此从网络中查询每台主机的效率将非常低。

    Right Thing To Do™ 就是在每台主机上运行一个看门狗,以确保安装并运行适当的软件。如果您使用英特尔博锐之类的东西,这个看门狗可能是作为服务运行的软件、预定脚本甚至是基于硬件的软件。

    要验证是否安装了 AV 软件,您可以使用以下 PowerShell 命令——

    $avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
                  -computername "." -filter "Name like '%antivirus%'"
    

    请注意,最后您有一个filter可以自定义的参数,以确保您正在查看正确的产品。

    在与操作员玩了一会儿之后like,您应该能够在这里和那里确定防病毒描述和细微变化。请注意,我上面的示例(任何包含“防病毒”一词的内容)非常简单。您应该寻找与您批准的防病毒软件匹配的特定模式(例如“Trend Micro Antivirus%”)

    filter无论如何,上面的命令将返回与您的声明匹配的已安装产品的集合。从这里您可以测试是否$avSoftware.Count大于零,在这种情况下您安装了防病毒软件。下面的例子列出了所有安装的杀毒软件——

    if ($avSoftware.Count -gt 0) {
        foreach ($av in $avSoftware) {
            write-host $p.Name
        }
    } else {
        write-host "No AV software found"
    }
    

    而不是仅仅打印一条消息说没有找到 AV,你显然应该做一些更有用的事情,例如

    • 通知管理员
    • 从网络安装 AV

    您还说您想获取已安装 AV 的版本。为此,您可以使用Version. Win32_Process让我们像这样修改上面的代码来打印已安装软件的版本号——

    $avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
                  -computername "." -filter "Name like '%antivirus%'"
    
    foreach ($av in $avSoftware) {
        write-host $av.Name, $av.Version
    }
    

    至于安装的病毒定义文件的版本,您必须依赖每个特定的 AV WMI 接口。为此,您必须查阅供应商的文档。

    还有一件事要记住。如果 AV 没有运行,仅仅知道主机安装了 AV 可能是不够的。检查安装了哪个 AV 后,您应该确保其进程正在运行。为此,您必须知道每个 AV 软件的适当流程是什么,然后像这样寻找它们——

    $processes = get-wmiobject -class "Win32_Process" -namespace "root\cimv2" `
                 -computername "." -filter "Name = 'TeaTimer.exe'"
    
    if ($processes.Count -gt 0) {
        foreach ($p in $processes) {
            write-host $p.Name
    } else {
        # AV not running. Launch it here or notify someone 
    }
    

    上面的示例查找名为“TeaTimer.exe”的 Spybot 进程(不完全是 AV,但你得到了图片)。修改它以查找您的进程。

    现在,所有这些都表明,如果您要与数千个这样的主机打交道,您可能应该投资一些管理工具(例如 LANdesk、Microsoft System Center 或 Level Platforms)。这些工具会让您的生活变得轻松很多。

    • 7
  2. Chris Sears
    2009-05-27T20:14:32+08:002009-05-27T20:14:32+08:00

    在当前版本的 Windows(xp sp3+、vista、win 7)中,您可以查询 Windows 安全中心使用的同一 WMI 提供程序,以了解防病毒产品是否已安装和最新。

    这是一个例子:

    Set objSWbemServices = GetObject("winmgmts:\\.\root\SecurityCenter")
    Set colFirewall = objSWbemServices.ExecQuery("Select * From antivirusProduct",,48)
    For Each objAntiVirusProduct In colFirewall
      WScript.Echo "companyName: " & objAntiVirusProduct.companyName
      WScript.Echo "displayName: " & objAntiVirusProduct.displayName
      WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid
      WScript.Echo "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled
      WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate
      WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber
    Next
    

    也就是说,并非所有防病毒产品都会注册 WMI 提供商,但我怀疑大多数流行的产品都会注册。此外,目前尚不清楚这是否得到微软的官方支持,因此它可能会在未来的版本中消失。

    您可以结合此处的其他 WMI 建议尝试它,如果这不起作用,则退回到扫描已安装的产品。

    • 3
  3. Knox
    2009-05-27T14:48:53+08:002009-05-27T14:48:53+08:00

    既然您提到趋势科技,而我们使用趋势,这就是我们所做的。计划任务对系统进行全面扫描并将结果放入文本文件中。实际上,它是一个以日期为文件名的日志文件……就像 C:\TRENDMICRO 文件夹中的 20090517.log 一样。因为这只是其中的扫描结果,所以它是一个小文件。

    在我们大约有 100 台计算机的情况下,服务器上的 powershell 脚本很容易遍历所有计算机,并连接这些文件,并且只查找没有字符串“Virus found count(0)”的文件“ 在他们中。显然,如果该文件和短语不存在,则说明有问题:最近没有运行 AV、发现病毒、未安装 AV 等等。您可能需要一些更花哨的东西来扩展它。

    但是,难道没有企业版本的 AV 可以为您完成所有工作,而不是我的穷人版本吗?

    • 2
  4. squillman
    2009-05-27T16:33:19+08:002009-05-27T16:33:19+08:00

    +1 为 Knox 关于企业版。我同意。Trend 的企业桌面解决方案有一个服务器,可以跟踪客户端以及他们当前拥有的扫描引擎和模式。它还允许您进行部署。我会用它来实现你的目标。使用此部署重新安装防毒墙网络版。我什至不会费心部署脚本来弄清楚你在游戏中的这个位置。最好重新开始。如果您还没有企业工具(这真的让我感到惊讶),请与 Trend 合作进行许可。如果你不这样做,那么有人需要为糟糕的购买决定负责。

    • 2
  5. Jack B Nimble
    2009-05-27T11:42:34+08:002009-05-27T11:42:34+08:00

    我会制作一个登录脚本来检查各种注册表项或文件以确定是否安装了产品。然后脚本可以创建一个记录机器的日志。

    Dim WSHShell,strRegKey 
    Set WSHShell = WScript.CreateObject("WScript.Shell") 
    strRegKey="HKLM\Software\Symantec\Version" 
    WSHShell.RegRead(strRegKey) 
    Wscript.quit(0) 
    
    • 1
  6. romandas
    2009-05-27T12:23:51+08:002009-05-27T12:23:51+08:00

    不确定这有多实用,给定 15,000 台主机,但如果您有一个希望在文本文件中签入的计算机列表,您可以在注册表中查询卸载键并解析结果。

    名为computers.txt 的文本文件,每行有一个机器名称:

    COMPUTER1
    COMPUTER2
    

    名为 batch.bat 的示例:

    @echo off
    
    for /F %%i in (computers.txt) do call :SUB %%i
    
    GOTO :EOF
    
    :SUB
    echo %1
    reg query "\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s
    

    我意识到这可能是文本中的一些信息过载,但它允许您解析您正在寻找的任何 A/V 软件的结果,而无需知道每个产品的卸载信息包含在注册表项中。

    您还可以针对特定产品的注册表项对其进行定制,将注册表查询替换为特定产品的注册表项。

    • 1
  7. Rob Haupt
    2009-05-27T13:00:00+08:002009-05-27T13:00:00+08:00

    依次回答你的问题

    1. 和 2。

    我会写一个脚本在每个系统上运行。您将查询卸载注册表项。您必须查看每个子项。在这种情况下,使用 WMI 是最好的方法。在该键中,您将看到产品名称和版本。有关脚本,请参阅此示例。

    3.

    我会反复试验,但在 Trend 的情况下,我想他们会将他们的定义版本放在注册表中 HKEY_LOCAL_MACHINE\Software\TrendMicro 或本地目录的配置或 ini 文件中。

    这仅适用于该版本的 AV 软件。您必须为多个版本执行此操作。

    • 1

相关问题

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

  • 什么是最好的企业病毒扫描系统?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve