佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 如何用VBS腳本收集遠程計算機或本地計算機安裝的軟件

如何用VBS腳本收集遠程計算機或本地計算機安裝的軟件

熱門標簽:鐵路電話系統(tǒng) 美圖手機 智能手機 檢查注冊表項 服務器配置 銀行業(yè)務 網(wǎng)站文章發(fā)布 呼叫中心市場需求

目標

用VBS腳本收集域中遠程計算機或本地計算機安裝的軟件,Windows版本。并將收集的結果保存到計算機名為文件名的文本文件中。文本文件可以保存到網(wǎng)絡路徑中或當前VBS文件所在目錄。同時支持32位和64位系統(tǒng)。
并過濾到一些補丁包、Office組件、NVIDIA、Intel®的驅(qū)動等。

制作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文件為空文件。請確認下列兩項內(nèi)容。

  • 遠程計算機必須于運行腳本的計算機是同一個域的成員計算機
  • 遠程計算機的防火墻為關閉狀態(tài),或設置了【入站規(guī)則】【W(wǎng)indows Management Instrumentation(WMI)】允許

到此這篇關于如何用VBS腳本收集遠程計算機或本地計算機安裝的軟件的文章就介紹到這了,更多相關VBS腳本收集計算機安裝的軟內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • vbs列出內(nèi)網(wǎng)的中計算機(工作組也可以)
  • 域內(nèi)計算機和用戶獲取實現(xiàn)vbs代碼
  • 用vbs實現(xiàn)判斷計算機是筆記本還是臺式機的代碼
  • vbs實現(xiàn)計算機重啟
  • 用vbs得到計算機的 IP 地址

標簽:河南 長治 新疆 紅河 樂山 滄州 上海 沈陽

巨人網(wǎng)絡通訊聲明:本文標題《如何用VBS腳本收集遠程計算機或本地計算機安裝的軟件》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    仙桃市| 白朗县| 沈丘县| 泽普县| 吴江市| 游戏| 五家渠市| 东山县| 星子县| 策勒县| 吉安市| 赤城县| 方城县| 油尖旺区| 济源市| 大方县| 山阴县| 扬中市| 波密县| 林口县| 金华市| 德州市| 汉寿县| 亳州市| 木兰县| 东山县| 关岭| 清丰县| 广元市| 监利县| 张家口市| 峨边| 三门峡市| 睢宁县| 庆城县| 固镇县| 渭南市| 嵊泗县| 新兴县| 宜君县| 兴海县|