如何用VBS腳本收集遠(yuǎn)程計(jì)算機(jī)或本地計(jì)算機(jī)安裝的軟件
目標(biāo)
用VBS腳本收集域中遠(yuǎn)程計(jì)算機(jī)或本地計(jì)算機(jī)安裝的軟件,Windows版本。并將收集的結(jié)果保存到計(jì)算機(jī)名為文件名的文本文件中。文本文件可以保存到網(wǎng)絡(luò)路徑中或當(dāng)前VBS文件所在目錄。同時(shí)支持32位和64位系統(tǒng)。
并過(guò)濾到一些補(bǔ)丁包、Office組件、NVIDIA、Intel®的驅(qū)動(dòng)等。
制作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 '未知語(yǔ)言 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 '讓個(gè)版本的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
假設(shè)保存的文件名為InstalledSoftList.vbs。保存在D:\
修改結(jié)果文件保存路徑。
請(qǐng)修改下列代碼
'FilePath = "\\Server-File\PCSoftList\" FilePath = CreateObject("Scripting.FileSystemObject").GetFolder(".").Path & "\"
當(dāng)前默認(rèn)是保存到InstalledSoftList.vbs文件所在目錄??梢圆恍薷摹?/p>
修改過(guò)濾條件(設(shè)置不想顯示的程序名)
請(qǐng)修改下列代碼
'不輸出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
默認(rèn)不顯示Security Update、.NET Framework、Microsoft Visual C++、NVIDIA、Intel®的程序
測(cè)試前可以不修改
測(cè)試
測(cè)試方法1
收集當(dāng)前計(jì)算機(jī)安裝的軟件
直接雙擊InstalledSoftList.vbs
假設(shè)計(jì)算機(jī)名為PC-Name01,會(huì)在D:\或指定目錄下生成一個(gè)名為PC-Name01.txt的文件。
測(cè)試方法2
收集遠(yuǎn)程計(jì)算機(jī)上安裝的軟件。
在CMD窗口中運(yùn)行下列命令。(假設(shè)計(jì)算機(jī)名為PC-Name02)
cscript d:\InstalledSoftList.vbs PC-Name02
會(huì)在D:\或指定目錄下生成一個(gè)名為PC-Name02.txt的文件。
測(cè)試方法2的注意事項(xiàng)
如果運(yùn)行后得到的PC-Name02.txt文件為空文件。請(qǐng)確認(rèn)下列兩項(xiàng)內(nèi)容。
- 遠(yuǎn)程計(jì)算機(jī)必須于運(yùn)行腳本的計(jì)算機(jī)是同一個(gè)域的成員計(jì)算機(jī)
- 遠(yuǎn)程計(jì)算機(jī)的防火墻為關(guān)閉狀態(tài),或設(shè)置了【入站規(guī)則】【W(wǎng)indows Management Instrumentation(WMI)】允許
到此這篇關(guān)于如何用VBS腳本收集遠(yuǎn)程計(jì)算機(jī)或本地計(jì)算機(jī)安裝的軟件的文章就介紹到這了,更多相關(guān)VBS腳本收集計(jì)算機(jī)安裝的軟內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。