使用VBS脚本如何收集远程计算机或本地计算机安装的软件
使用VBS脚本如何收集远程计算机或本地计算机安装的软件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
制作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
默认不显示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禁用或启动USB存储设备
这篇文章主要介绍“如何使用VBS禁用或启动USB存储设备”,在日常操作中,相信很多人在如何使用VBS禁用或启动USB存储设备问题上...
-
怎么用vbs结合wget实现下载网站图片
本篇内容介绍了“怎么用vbs结合wget实现下载网站图片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让...
-
vbs中如何使用Size属性
本篇文章为大家展示了vbs中如何使用Size属性,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所...
-
VBS中怎么获取当前目录下所有文件夹名字
-
vbs中怎么获取当前路径
vbs中怎么获取当前路径,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行...
-
VBS中怎么获取当前日期的前一天
本篇文章为大家展示了VBS中怎么获取当前日期的前一天,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你...
-
VBS中怎么获取GZIP压缩的HTTP内容
VBS中怎么获取GZIP压缩的HTTP内容,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章...
-
vbs中怎么获取远程host文件并保存到指定目录
vbs中怎么获取远程host文件并保存到指定目录,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问...
-
VBS中怎么获取外网IP地址并发送到指定邮箱
VBS中怎么获取外网IP地址并发送到指定邮箱,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的...
-
vbs中怎么获取radmin注册表的信息
vbs中怎么获取radmin注册表的信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希...