检测远程计算机上是否安装了 HP Fortify

Detect if HP Fortify is installed on remote computers

是否有人有脚本来扫描网络以获取主机列表以确定是否安装了 HP Fortify 软件并提供版本?

我尝试使用 PowerShell 脚本扫描注册表的 add/remove 部分,但那里没有出现 Fortify。

如有任何帮助,我们将不胜感激!

您至少有 3 种方法可以完成此操作。

  1. 使用注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninst‌​all(在 64 位 Windows 版本上):如果程序是使用安装程序安装的,则应在此处列出。

您可以从这里开始:

$base = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $ComputerName)
if($key = $base.OpenSubKey("SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")) {
    foreach($subkey in $key.GetSubKeyNames()) {
        $name = ($key.OpenSubKey($subkey)).GetValue("DisplayName")
        $version = ($key.OpenSubKey($subkey)).GetValue("DisplayVersion")
        if($name) { "$name ($version)" }
    }
}
  1. 使用 Win32_Product WMI class(较慢,并非所有程序都出现在这里):

Get-WmiObject -ComputerName "127.0.0.1" -Class Win32_Product | Select Name,Version

  1. 使用应用程序本身的文件,在 C:\Program Files\HP_Fortify 目录(或 \$computerName\c$\Program Files\HP_Fortify 远程计算机)中找到包含所需版本的可执行文件。您将能够 Get-Item 读取所需文件的 Version 属性。

计算机 SERVER001 上的示例路径 C:\Program Files\HP_Fortify\main_service.exe:

$computerName = "SERVER001"
$exePath = "\$computerName\c$\Program Files\HP_Fortify\main_service.exe"

if(Test-Path $exePath) {
    (Get-Item $exePath).VersionInfo.ProductVersion
} else {
    "file not found: $exePath"
}