首页 > 其他分享 >如何用VBS脚本收集远程计算机或本地计算机安装的软件

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

时间:2024-04-16 18:37:14浏览次数:25  
标签:计算机 intRet Microsoft VBS objReg strName strPgm HKLM 远程

                        <div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">目标</a></li><li><a href="#_label1">制作VBS脚本</a></li><li><a href="#_label2">修改结果文件保存路径。</a></li><li><a href="#_label3">修改过滤条件(设置不想显示的程序名)</a></li><li><a href="#_label4">测试</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_0">测试方法1</a></li><li><a href="#_lab2_4_1">测试方法2</a></li><ul class="third_class_ul"><li><a href="#_label3_4_1_0">测试方法2的注意事项</a></li></ul></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>目标</h2>

用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脚本收集计算机安装的软内容请搜索创业项目排行榜前十名http://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持创业项目排行榜前十名http://www.piaodoo.com/!

                        友情连接: 

创业项目排行榜前十名

美文集

茂名一技

茂名一技

手游排行前十名

标签:计算机,intRet,Microsoft,VBS,objReg,strName,strPgm,HKLM,远程
From: https://www.cnblogs.com/python1314520/p/18138903

相关文章

  • vbs查询局域网内电脑的软件和硬件列表清单
    <p>下面的代码在windows下容易报毒大家可以放心使用</p>'==========================================================================''Date:2009/3/19'Name:查询软件和硬件列表清单'Author:Smileruner'www.overmcse.com......
  • vbs获取操作系统及其版本号
    <h2>vbs获取操作系统及其版本号</h2>'**************************************'*byr05e'*操作系统及其版本号'**************************************strComputer="."SetobjWMIService=GetObject("winmgmt......
  • 教你编写Windows的VBScript与Mac的AppleSCript脚本解放双手
    <divid="navCategory"><h5class="catalogue">目录</h5><ulclass="first_class_ul"><li><ahref="#_label0">一、Windows篇——VBScript</a></li&g......
  • vbs脚本和windows定时任务实现qq消息表情包定时发送功能
    <h2>目标</h2>在某个时间唤醒电脑屏幕后,自动发送qq信息,并附带表情包,发送完毕后关闭电脑屏幕。整个过程不用过多的程序运行,我们借助vbs脚本和windows定时任务去实现这一功能。准备vbs代码qq信息txt文本qq文件表情包文件发送联系人的快捷方式3个windows......
  • 使用VBS创建快捷方式的代码
    <p>在网吧维护过程中经常要发送桌面快捷方式,有什么批处理的方式能便捷发送桌面快捷方式呢,就拿我这边网吧steam下发为例给大家一个参考,如果要使用直接复制下面代码改下具体参数就行了。代码如下:</p>@echooff::设置程序或文件的路径(必选)setProgram=D......
  • vbs实现web自动登录网站的方法
    <divid="navCategory"><h5class="catalogue">目录</h5><ulclass="first_class_ul"><li><ahref="#_label0">一,编写vbs</a></li><li><ahref="......
  • VBScript编写Windows防止锁屏脚本程序
    <divid="navCategory"><h5class="catalogue">目录</h5><ulclass="first_class_ul"><li><ahref="#_label0">背景介绍</a></li><li><ahref="#_......
  • VBS 批量Ping的项目实现
    <p>本文用vb编写的ping程序实现,具体如下:</p>'判断当前VBS脚本是否由CScript执行IfInStr(LCase(WScript.FullName),"cscript.exe")=0Then???'若不是由CScript执行,则使用CScript重新执行当前脚本???SetobjShell=CreateObject("Shell.Appl......
  • 教你用vbs实现微信自动发送消息功能
    <divid="navCategory"><h5class="catalogue">目录</h5><ulclass="first_class_ul"><li><ahref="#_label0">前言</a></li><li><ahref="#_la......
  • 抖音很火的vbs表白代码(简单实用!)
    <p>好玩的循环表白代码</p>1,右键->新建文本文件2,右键->编辑3,粘贴下面代码MsgBox"十年相遇"MsgBox"百年回眸"MsgBox"千年同船渡"MsgBox"我愿以万年的等待"MsgBox"......