网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 前端脚本 » 正文

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

2021-3-1 17:55:4 | 作者:老铁SEO | 0个评论 | 人浏览

 

目标

用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 & “\”

修改过滤条件(设置不想显示的程序名)

请修改下列代码

‘不输出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)】允许

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐