如何用VBS脚本收集远程计算机或本地计算机安装的软件

2023-12-01 0 855
目录
  • 目标
  • 制作VBS脚本
  • 修改结果文件保存路径。
  • 修改过滤条件(设置不想显示的程序名)
  • 测试
    • 测试方法1
    • 测试方法2
      • 测试方法2的注意事项

目标

用VBS脚本收集域中远程计算机或本地计算机安装的软件,Windows版本。并将收集的结果保存到计算机名为文件名的文本文件中。文本文件可以保存到网络路径中或当前VBS文件所在目录。同时支持32位和64位系统。
并过滤到一些补丁包、Office组件、NVIDIA、Intel®的驱动等。

制作VBS脚本

保存下面的VBS程序代码到vbs文件中

On Error Resume Next

Const HKCU = &h80000001
Const HKLM = &H80000002
Const strKeyPath = \”Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\\”
Const str64KeyPath = \”SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\\”
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

\’FilePath = \”\\\\Server-File\\PCSoftList\\\”
FilePath = CreateObject(\”Scripting.FileSystemObject\”).GetFolder(\”.\”).Path & \”\\\”
Set Wshell = CreateObject(\”Wscript.Shell\”)
Set objFSO = CreateObject(\”Scripting.FileSystemobject\”)

\’Set collected computers Name
set argus=wscript.arguments
if argus.count=0 then
strComputerName = Wshell.RegRead(\”HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Hostname\”)
else
strComputerName = argus(0)
end if

Set textWriteFile = objFSO.OpenTextFile(FilePath & ucase(strComputerName) &\”.txt\”,ForWriting,True,True)

Set objReg = GetObject(\”winmgmts://\” & strComputerName & \”/root/default:StdRegProv\”)

\’Get OS Version
intRet = objReg.GetStringValue(HKLM, \”SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\”,\”ProductName\”,strOSVersion)
If intRet = 0 Then
intRet = objReg.GetStringValue(HKLM, \”SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\”,\”CSDVersion\”,strOSServicePack)
intRet = objReg.GetStringValue(HKLM, \”SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\”,\”ProductName\”,str64BitOSVersion)
if intRet = 0 then
strOSVersion = strOSVersion & \” 64bit\”
end if
intRet = objReg.GetStringValue(HKLM, \”SYSTEM\\CurrentControlSet\\Control\\Nls\\Language\”,\”InstallLanguage\”,OSLanguageCode)
if intRet = 0 then
select case OSLanguageCode
case \”0804\” \’中文
strOSVersion = strOSVersion & \” Chinese Version\”
case \”0411\” \’日文
strOSVersion = strOSVersion & \” Japanese Version\”
case \”0409\” \’英文
strOSVersion = strOSVersion & \” English Version\”
case else \’未知语言
strOSVersion = strOSVersion & \” UnknownLanguage Version\”
end select
end if
Else
strOSVersion = \”OS Get Failed\”
strOSServicePack = \”NoFind\”
End If
if InStr(LCase(strOSVersion),\”windows\”)>0 then
textWriteFile.WriteLine(\”\”\”\” & ucase(strComputerName) & \”\”\”\” & vbTab & \”\”\”\” & strOSVersion & \”\”\”\” & vbTab & \”\”\”\” & strOSServicePack & \”\”\”\”)
end if

\’Display User Software.
objReg.EnumKey HKCU, strKeyPath,arrSubKeys
For Each strSubKey In arrSubKeys
intGet = objReg.GetDWORDValue(HKCU, strKeyPath & strSubKey,\”SystemComponent\”,intSystemComponent)
If IsNull(intSystemComponent) then
intSystemComponent = 0
End If
intRet = objReg.GetStringValue(HKCU, strKeyPath & strSubKey,\”ParentDisplayName\”,strName)
If intSystemComponent = 0 and intRet > 0 then
intRet = objReg.GetStringValue(HKCU, strKeyPath & strSubKey,\”DisplayName\”,strName)
If strName <> \”\” And intRet = 0 And ignorePgm(strName) Then
strName = replace(replace(strName,vbCrLf,\”\”),vbTab,\”\”)
intRet = objReg.GetStringValue(HKCU, strKeyPath & strSubKey,\”DisplayVersion\”,strVersion)
textWriteFile.WriteLine(\”\”\”\” & ucase(strComputerName) & \”\”\”\” & vbTab & \”\”\”\” & strName & \”\”\”\” & vbTab & \”\”\”\” & strVersion & \”\”\”\”)
End If
End If
Next

\’Display Machine 32bit Software.
objReg.EnumKey HKLM, strKeyPath,arrSubKeys
For Each strSubKey In arrSubKeys
intGet = objReg.GetDWORDValue(HKLM, strKeyPath & strSubKey,\”SystemComponent\”,intSystemComponent)
If IsNull(intSystemComponent) then
intSystemComponent = 0
End If
intRet = objReg.GetStringValue(HKLM, strKeyPath & strSubKey,\”ParentDisplayName\”,strName)
If intSystemComponent = 0 and intRet > 0 then
intRet = objReg.GetStringValue(HKLM, strKeyPath & strSubKey,\”DisplayName\”,strName)
If strName <> \”\” And intRet = 0 And ignorePgm(strName) Then \’
strName = replace(replace(strName,vbCrLf,\”\”),vbTab,\”\”)
intRet = objReg.GetStringValue(HKLM, strKeyPath & strSubKey,\”DisplayVersion\”,strVersion)
textWriteFile.WriteLine(\”\”\”\” & ucase(strComputerName) & \”\”\”\” & vbTab & \”\”\”\” & strName & \”\”\”\” & vbTab & \”\”\”\” & strVersion & \”\”\”\”)
End If
End If
Next

\’Display Machine 64bit Software.
objReg.EnumKey HKLM, str64KeyPath,arrSubKeys
For Each strSubKey In arrSubKeys
intGet = objReg.GetDWORDValue(HKLM, str64KeyPath & strSubKey,\”SystemComponent\”,intSystemComponent)
If IsNull(intSystemComponent) then
intSystemComponent = 0
End If
intRet = objReg.GetStringValue(HKLM, str64KeyPath & strSubKey,\”ParentDisplayName\”,strName)
If intSystemComponent = 0 and intRet > 0 then
intRet = objReg.GetStringValue(HKLM, str64KeyPath & strSubKey,\”DisplayName\”,strName)
If strName <> \”\” And intRet = 0 And ignorePgm(strName) Then
strName = replace(replace(strName,vbCrLf,\”\”),vbTab,\”\”)
intRet = objReg.GetStringValue(HKLM, str64KeyPath & strSubKey,\”DisplayVersion\”,strVersion)
textWriteFile.WriteLine(\”\”\”\” & ucase(strComputerName) & \”\”\”\” & vbTab & \”\”\”\” & strName & \”\”\”\” & vbTab & \”\”\”\” & strVersion & \”\”\”\”)
End If
End If
Next

textWriteFile.Close

function ignorePgm(strPgm)
If inStr(1,strPgm,\”Microsoft Office \”,1)<=0 then
\’不输出Security Update、.NET Framework、Microsoft Visual C++、NVIDIA、Intel(R)的程序
ignorePgm = inStr(1,strPgm,\”Security Update\”,1)<=0 _
And inStr(1,strPgm,\”.NET Framework\”,1)<=0 _
And inStr(1,strPgm,\”Microsoft Visual C++\”,1)<=0 _
And inStr(1,strPgm,\”NVIDIA\”,1)<=0 _
And inStr(1,strPgm,\”Intel(R)\”,1)<=0
Else
\’让个版本的Office能正常输出
ignorePgm = inStr(1,strPgm,\”Microsoft Office \”,1)>0 _
And (inStr(1,strPgm,\” 2000 \”,1)>0 _
Or inStr(1,strPgm,\” 2003 \”,1)>0 _
Or (inStr(1,strPgm,\”Microsoft Office Access \”,1)=1 And inStr(1,strPgm,\” MUI\”,1)<=0) _
Or strPgm=\”Microsoft Office Professional Plus 2007\” _
Or strPgm=\”Microsoft Office Professional Plus 2010\” _
Or strPgm=\”Microsoft Office Professional Plus 2016\” _
Or strPgm=\”Microsoft Office Standard 2007\” _
Or strPgm=\”Microsoft Office Standard 2010\” _
Or strPgm=\”Microsoft Office Standard 2016\” _
Or strPgm=\”Microsoft Office Standard 2019\”)

End If
end function

假设保存的文件名为InstalledSoftList.vbs。保存在D:\\

修改结果文件保存路径。

请修改下列代码

\’FilePath = \”\\\\Server-File\\PCSoftList\\\”
FilePath = CreateObject(\”Scripting.FileSystemObject\”).GetFolder(\”.\”).Path & \”\\\”

当前默认是保存到InstalledSoftList.vbs文件所在目录。可以不修改。

修改过滤条件(设置不想显示的程序名)

请修改下列代码

\’不输出Security Update、.NET Framework、Microsoft Visual C++、NVIDIA、Intel(R)的程序
ignorePgm = inStr(1,strPgm,\”Security Update\”,1)<=0 _
And inStr(1,strPgm,\”.NET Framework\”,1)<=0 _
And inStr(1,strPgm,\”Microsoft Visual C++\”,1)<=0 _
And inStr(1,strPgm,\”NVIDIA\”,1)<=0 _
And inStr(1,strPgm,\”Intel(R)\”,1)<=0

默认不显示Security Update、.NET Framework、Microsoft Visual C++、NVIDIA、Intel®的程序
测试前可以不修改

测试

测试方法1

收集当前计算机安装的软件

直接双击InstalledSoftList.vbs

假设计算机名为PC-Name01,会在D:\\或指定目录下生成一个名为PC-Name01.txt的文件。

测试方法2

收集远程计算机上安装的软件。
在CMD窗口中运行下列命令。(假设计算机名为PC-Name02)

cscript d:\\InstalledSoftList.vbs PC-Name02

会在D:\\或指定目录下生成一个名为PC-Name02.txt的文件。

测试方法2的注意事项

如果运行后得到的PC-Name02.txt文件为空文件。请确认下列两项内容。

  • 远程计算机必须于运行脚本的计算机是同一个域的成员计算机
  • 远程计算机的防火墙为关闭状态,或设置了【入站规则】【Windows Management Instrumentation(WMI)】允许

到此这篇关于如何用VBS脚本收集远程计算机或本地计算机安装的软件的文章就介绍到这了,更多相关VBS脚本收集计算机安装的软内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • vbs列出内网的中计算机(工作组也可以)
  • 域内计算机和用户获取实现vbs代码
  • 用vbs实现判断计算机是笔记本还是台式机的代码
  • vbs实现计算机重启
  • 用vbs得到计算机的 IP 地址

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 VBS 如何用VBS脚本收集远程计算机或本地计算机安装的软件 https://www.u-9.cn/jiaoben/vbscript/9782.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务