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

使用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&reg;的程序测试前可以不修改

测试

测试方法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脚本如何收集远程计算机或本地计算机安装的软件问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-02-24 07:35:47
收藏
分享
海报
0 条评论
170
上一篇:如何在idea使用git stash暂存一次提交 下一篇:如何在PostgreSQL中判断字符串是否包含目标字符串
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码