用VBS脚本收集域中远程计算机或本地计算机安装的软件,Windows版本。并将收集的结果保存到计算机名为文件名的文本文件中。文本文件可以保存到网络路径中或当前VBS文件所在目录。同时支持32位和64位系统。
并过滤到一些补丁包、Office组件、NVIDIA、Intel®的驱动等。
保存下面的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®的程序
测试前可以不修改
收集当前计算机安装的软件
直接双击InstalledSoftList.vbs
假设计算机名为PC-Name01,会在D:\或指定目录下生成一个名为PC-Name01.txt的文件。
收集远程计算机上安装的软件。
在CMD窗口中运行下列命令。(假设计算机名为PC-Name02)
cscript d:\InstalledSoftList.vbs PC-Name02
会在D:\或指定目录下生成一个名为PC-Name02.txt的文件。
如果运行后得到的PC-Name02.txt文件为空文件。请确认下列两项内容。
到此这篇关于如何用VBS脚本收集远程计算机或本地计算机安装的软件的文章就介绍到这了,更多相关VBS脚本收集计算机安装的软内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
下一篇:如何使用vb 监控电脑活动记录