如何用VBS脚本收集远程计算机或本地计算机安装的软件
目标
用VBS脚本收集域中远程计算机或本地计算机安装的软件,Windows版本。并将收集的结果保存到计算机名为文件名的文本文件中。文本文件可以保存到网络路径中或当前VBS文件所在目录。同时支持32位和64位系统。
并过滤到一些补丁包、Office组件、NVIDIA、Intel®的驱动等。
制作VBS脚本
保存下面的VBS程序代码到vbs文件中
OnErrorResumeNext ConstHKCU=&h80000001 ConstHKLM=&H80000002 ConststrKeyPath="Software\Microsoft\Windows\CurrentVersion\Uninstall\" Conststr64KeyPath="SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" ConstForReading=1 ConstForWriting=2 ConstForAppending=8 'FilePath="\\Server-File\PCSoftList\" FilePath=CreateObject("Scripting.FileSystemObject").GetFolder(".").Path&"\" SetWshell=CreateObject("Wscript.Shell") SetobjFSO=CreateObject("Scripting.FileSystemobject") 'SetcollectedcomputersName setargus=wscript.arguments ifargus.count=0then strComputerName=Wshell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname") else strComputerName=argus(0) endif SettextWriteFile=objFSO.OpenTextFile(FilePath&ucase(strComputerName)&".txt",ForWriting,True,True) SetobjReg=GetObject("winmgmts://"&strComputerName&"/root/default:StdRegProv") 'GetOSVersion intRet=objReg.GetStringValue(HKLM,"SOFTWARE\Microsoft\WindowsNT\CurrentVersion","ProductName",strOSVersion) IfintRet=0Then intRet=objReg.GetStringValue(HKLM,"SOFTWARE\Microsoft\WindowsNT\CurrentVersion","CSDVersion",strOSServicePack) intRet=objReg.GetStringValue(HKLM,"SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion","ProductName",str64BitOSVersion) ifintRet=0then strOSVersion=strOSVersion&"64bit" endif intRet=objReg.GetStringValue(HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","InstallLanguage",OSLanguageCode) ifintRet=0then selectcaseOSLanguageCode case"0804"'中文 strOSVersion=strOSVersion&"ChineseVersion" case"0411"'日文 strOSVersion=strOSVersion&"JapaneseVersion" case"0409"'英文 strOSVersion=strOSVersion&"EnglishVersion" caseelse'未知语言 strOSVersion=strOSVersion&"UnknownLanguageVersion" endselect endif Else strOSVersion="OSGetFailed" strOSServicePack="NoFind" EndIf ifInStr(LCase(strOSVersion),"windows")>0then textWriteFile.WriteLine(""""&ucase(strComputerName)&""""&vbTab&""""&strOSVersion&""""&vbTab&""""&strOSServicePack&"""") endif 'DisplayUserSoftware. objReg.EnumKeyHKCU,strKeyPath,arrSubKeys ForEachstrSubKeyInarrSubKeys intGet=objReg.GetDWORDValue(HKCU,strKeyPath&strSubKey,"SystemComponent",intSystemComponent) IfIsNull(intSystemComponent)then intSystemComponent=0 EndIf intRet=objReg.GetStringValue(HKCU,strKeyPath&strSubKey,"ParentDisplayName",strName) IfintSystemComponent=0andintRet>0then intRet=objReg.GetStringValue(HKCU,strKeyPath&strSubKey,"DisplayName",strName) IfstrName<>""AndintRet=0AndignorePgm(strName)Then strName=replace(replace(strName,vbCrLf,""),vbTab,"") intRet=objReg.GetStringValue(HKCU,strKeyPath&strSubKey,"DisplayVersion",strVersion) textWriteFile.WriteLine(""""&ucase(strComputerName)&""""&vbTab&""""&strName&""""&vbTab&""""&strVersion&"""") EndIf EndIf Next 'DisplayMachine32bitSoftware. objReg.EnumKeyHKLM,strKeyPath,arrSubKeys ForEachstrSubKeyInarrSubKeys intGet=objReg.GetDWORDValue(HKLM,strKeyPath&strSubKey,"SystemComponent",intSystemComponent) IfIsNull(intSystemComponent)then intSystemComponent=0 EndIf intRet=objReg.GetStringValue(HKLM,strKeyPath&strSubKey,"ParentDisplayName",strName) IfintSystemComponent=0andintRet>0then intRet=objReg.GetStringValue(HKLM,strKeyPath&strSubKey,"DisplayName",strName) IfstrName<>""AndintRet=0AndignorePgm(strName)Then' strName=replace(replace(strName,vbCrLf,""),vbTab,"") intRet=objReg.GetStringValue(HKLM,strKeyPath&strSubKey,"DisplayVersion",strVersion) textWriteFile.WriteLine(""""&ucase(strComputerName)&""""&vbTab&""""&strName&""""&vbTab&""""&strVersion&"""") EndIf EndIf Next 'DisplayMachine64bitSoftware. objReg.EnumKeyHKLM,str64KeyPath,arrSubKeys ForEachstrSubKeyInarrSubKeys intGet=objReg.GetDWORDValue(HKLM,str64KeyPath&strSubKey,"SystemComponent",intSystemComponent) IfIsNull(intSystemComponent)then intSystemComponent=0 EndIf intRet=objReg.GetStringValue(HKLM,str64KeyPath&strSubKey,"ParentDisplayName",strName) IfintSystemComponent=0andintRet>0then intRet=objReg.GetStringValue(HKLM,str64KeyPath&strSubKey,"DisplayName",strName) IfstrName<>""AndintRet=0AndignorePgm(strName)Then strName=replace(replace(strName,vbCrLf,""),vbTab,"") intRet=objReg.GetStringValue(HKLM,str64KeyPath&strSubKey,"DisplayVersion",strVersion) textWriteFile.WriteLine(""""&ucase(strComputerName)&""""&vbTab&""""&strName&""""&vbTab&""""&strVersion&"""") EndIf EndIf Next textWriteFile.Close functionignorePgm(strPgm) IfinStr(1,strPgm,"MicrosoftOffice",1)<=0then '不输出SecurityUpdate、.NETFramework、MicrosoftVisualC++、NVIDIA、Intel(R)的程序 ignorePgm=inStr(1,strPgm,"SecurityUpdate",1)<=0_ AndinStr(1,strPgm,".NETFramework",1)<=0_ AndinStr(1,strPgm,"MicrosoftVisualC++",1)<=0_ AndinStr(1,strPgm,"NVIDIA",1)<=0_ AndinStr(1,strPgm,"Intel(R)",1)<=0 Else '让个版本的Office能正常输出 ignorePgm=inStr(1,strPgm,"MicrosoftOffice",1)>0_ And(inStr(1,strPgm,"2000",1)>0_ OrinStr(1,strPgm,"2003",1)>0_ Or(inStr(1,strPgm,"MicrosoftOfficeAccess",1)=1AndinStr(1,strPgm,"MUI",1)<=0)_ OrstrPgm="MicrosoftOfficeProfessionalPlus2007"_ OrstrPgm="MicrosoftOfficeProfessionalPlus2010"_ OrstrPgm="MicrosoftOfficeProfessionalPlus2016"_ OrstrPgm="MicrosoftOfficeStandard2007"_ OrstrPgm="MicrosoftOfficeStandard2010"_ OrstrPgm="MicrosoftOfficeStandard2016"_ OrstrPgm="MicrosoftOfficeStandard2019") EndIf endfunction
假设保存的文件名为InstalledSoftList.vbs。保存在D:\
修改结果文件保存路径。
请修改下列代码
'FilePath="\\Server-File\PCSoftList\" FilePath=CreateObject("Scripting.FileSystemObject").GetFolder(".").Path&"\"
当前默认是保存到InstalledSoftList.vbs文件所在目录。可以不修改。
修改过滤条件(设置不想显示的程序名)
请修改下列代码
'不输出SecurityUpdate、.NETFramework、MicrosoftVisualC++、NVIDIA、Intel(R)的程序 ignorePgm=inStr(1,strPgm,"SecurityUpdate",1)<=0_ AndinStr(1,strPgm,".NETFramework",1)<=0_ AndinStr(1,strPgm,"MicrosoftVisualC++",1)<=0_ AndinStr(1,strPgm,"NVIDIA",1)<=0_ AndinStr(1,strPgm,"Intel(R)",1)<=0
默认不显示SecurityUpdate、.NETFramework、MicrosoftVisualC++、NVIDIA、Intel®的程序
测试前可以不修改
测试
测试方法1
收集当前计算机安装的软件
直接双击InstalledSoftList.vbs
假设计算机名为PC-Name01,会在D:\或指定目录下生成一个名为PC-Name01.txt的文件。
测试方法2
收集远程计算机上安装的软件。
在CMD窗口中运行下列命令。(假设计算机名为PC-Name02)
cscriptd:\InstalledSoftList.vbsPC-Name02
会在D:\或指定目录下生成一个名为PC-Name02.txt的文件。
测试方法2的注意事项
如果运行后得到的PC-Name02.txt文件为空文件。请确认下列两项内容。
- 远程计算机必须于运行脚本的计算机是同一个域的成员计算机
- 远程计算机的防火墙为关闭状态,或设置了【入站规则】【WindowsManagementInstrumentation(WMI)】允许
到此这篇关于如何用VBS脚本收集远程计算机或本地计算机安装的软件的文章就介绍到这了,更多相关VBS脚本收集计算机安装的软内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。