1

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

我尝试使用扫描注册表的添加/删除部分的 PowerShell 脚本,但 Fortify 没有出现在那里。

任何帮助将不胜感激!

4

1 回答 1

3

您至少有 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_ProductWMI 类(速度较慢,并非所有程序都出现在此处):

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所需文件的属性。

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

$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"
}
于 2015-12-07T14:50:14.237 回答