自动化代码获取局域网内主机的软件清单

想问一下如何用自动化代码实现对于局域网内部主机的已安装软件清单获取?(可能会涉及到windows/ linus/ ios系统)
想要获取的信息包括:软件已安装的版本号、软件名称、软件序列号、软件提供商、安装日期


获取局域网内主机的软件清单需要使用远程管理技术,如Windows中的WMI(Windows Management Instrumentation)、PowerShell、Linux中的SSH(Secure Shell)等方式。由于不同操作系统的实现方式不同,下面我将分别介绍在Windows和Linux系统中如何获取局域网内主机的软件清单。

在Windows系统中,可以使用WMI和PowerShell来获取局域网内主机的软件清单。下面是一个使用PowerShell获取软件清单的示例代码:

powershell
Copy
# 获取局域网内所有主机的IP地址
$ips = 1..254 | % { "192.168.1.$_" }

# 遍历每个主机,并获取其安装的软件清单
foreach ($ip in $ips) {
    $computer = [System.Net.Dns]::GetHostByAddress($ip).HostName
    $software = Get-WmiObject -Class Win32_Product -ComputerName $computer | Select-Object Name, Version, IdentifyingNumber, Vendor, InstallDate
    $software | Export-Csv -Path "$computer.csv" -Encoding UTF8 -NoTypeInformation
}
这段代码首先通过遍历IP地址的方式获取局域网内所有主机的IP地址,并使用 GetHostByAddress 方法获取每个主机的计算机名。然后,使用 Get-WmiObject 命令获取每个主机的软件清单,并使用 Select-Object 命令选择需要输出的信息。最后,将获取到的软件清单导出到CSV文件中,文件名为主机的计算机名。

在Linux系统中,可以使用SSH和命令行工具来获取软件清单。下面是一个使用SSH获取软件清单的示例代码:

bash
Copy
#!/bin/bash

# 获取局域网内所有主机的IP地址
ips=$(seq 1 254 | sed "s/^/192.168.1./")

# 遍历每个主机,并获取其安装的软件清单
for ip in $ips; do
    computer=$(ssh username@$ip "hostname")
    software=$(ssh username@$ip "dpkg-query -Wf '\${Package}\t\${Version}\t\${Homepage}\t\${Maintainer}\t\${Install-Time}\n'")
    echo "$software" > "$computer.txt"
done
这段代码首先使用 seq 命令和 sed 命令生成所有主机的IP地址,并使用 ssh 命令登录每个主机并获取其计算机名。然后,使用 dpkg-query 命令获取每个主机的软件清单,并将结果输出到文本文件中,文件名为主机的计算机名。

需要注意的是,这些示例代码仅供参考,具体实现方式可能因环境而异,需要根据实际情况进行修改和调整。同时,获取软件清单需要管理员权限,因此需要使用具有管理员权限的账户进行访问。

回答整理自chatgpt,如果有帮助麻烦采纳一下,谢谢啦!