Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 2
Благодарности: 2

Профиль | Отправить PM | Цитировать


Можно при помощи вот такого скрипта:
читать дальше »

Код: Выделить весь код
'========================================================================== 
' NAME      :   SoftWareAudit.vbs 
' AUTHOR    :   Павел Б. 
' DATE      :   29.01.2009 
' 
' COMMENT   :   используется для проведения инвентаризации программного 
'               обеспечения 
'========================================================================== 
ResultReWrite = 0   'флаг перезаписи фаила результатов 1 - перезапись 0 -нет 
strPathFileResultat =".\"' "C:\" '".\" \\domenserver\datainventory$\ здесь указываем путь куда будут сохраняться отчёты по инветаризации ПО 
strRazdelitel = vbTab '";"'vbTab 'для разделения полей применить символ табуляции (vbTab) 
Const HKEY_CURRENT_CONFIG = &H80000005 
Const HKEY_LOCAL_MACHINE = &H80000002 
Const HKEY_CLASSES_ROOT = &H80000000 
Const HKEY_CURRENT_USER = &H80000001 
Const HKEY_USERS = &H80000003 
Dim strSearchKey(100) 
Dim strKey_soft 
Dim sSoftware(200,3), sSoftware_i 'значения массива с данными ProductId и LicenseKey, счетчика текущей строки массива 
strComputer = "." 
sSoftware_i = 0 
strRegKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"  'strKey 
strWinkey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion" 
strSearchKey(1) = "DisplayName" 
strSearchKey(2) = "QuietDisplayName" 
strSearchKey(3) = "InstallDate" 
strSearchKey(4) = "DisplayVersion" 
strSearchKey(5) = "VersionMajor" 
strSearchKey(6) = "VersionMinor"  
strSearchKey(7) = "EstimatedSize" 
strSearchKey(8) = "ProductID" 
strSearchKey(9) = "DigitalProductId" 
strSearchKey(10) = "DisplayVersion" 
strSearchKey(11) = "ProductName"         
strDate = DateFormat(Date) 
strTime = TimeFormat(Time) 
strParamComputerName = "не_найдено" 
strFull = "" 
strMACadress = "" 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set objReg      =   GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv") 
Set colSettings =   objWMIService.ExecQuery ("SELECT * FROM Win32_ComputerSystem") 
Set colSoftware =   objWMIService.ExecQuery ("SELECT * FROM Win32_Product")  
Set colItems    =   objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration",,48)  
Dim oWS : Set oWS = CreateObject("WScript.Shell") 
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject") 
Dim i, ii                           'просто счётчик 
Dim sRegTitle, sRegKey              'переменные для работы cо строками выгруженного реестра 
Dim objLineText, LineText           'переменные для загрузки информации из техтового файла (ansi) 
Dim shDefKey 
sRegDataSearch=Array("HKEY_CURRENT_USER","HKEY_USERS","HKEY_LOCAL_MACHINE","HKEY_CLASSES_ROOT","HKEY_CURRENT_CONFIG") ' используються при выгрузке реестра 
strPath = oWS.Environment("Process")("Temp") 
For i=0 To UBOUND(sRegDataSearch) 
oWS.Run "regedit /e /a " & strPath & "\" & sRegDataSearch(i)& ".tmp " & sRegDataSearch(i), , True 'выгрузка реестра в файлы (ansi) для поиска 
With oFSO.GetFile(strPath & "\" & sRegDataSearch(i) & ".tmp ") 
objLineText = Split(.OpenAsTextStream(1, 0).Read(.Size), vbcrlf) 
End With 
oFSO.DeleteFile(strPath & "\" & sRegDataSearch(i) & ".tmp ") 'удаление не нужных файлов 
For Each LineText In objLineText 
If InStr(1,LineText,"[",1) > 0 Then  
sRegTitle = LineText 
End if 
If InStr(1,LineText,strSearchKey(9),1) > 0 Then 
If sRegTitle <> LineText Then 
If (InStr(1,sRegTitle,"[") > 0) And (InStr(1,sRegTitle,"]") > 0) Then 
sRegTitle = Mid(sRegTitle, InStr(1,sRegTitle,"[")+1, InStr(1,sRegTitle,"]")-InStr(1,sRegTitle,"[")-1) 
GetDataReg (sRegTitle) 
End If  
End If 
End If 
Next 
Erase objLineText 
Next 
objReg.EnumKey HKLM, strRegKey, arrSubkeys 
For Each objItem in colItems 
If objItem.DNSHostName <> "" Then 
If strMACadress <> "" Then strMACadress = strMACadress & "," End If 
strMACadress = strMACadress & objItem.MACAddress                         
End If         
Next 
For Each objComputer In colSettings 
strComputerRole =  "88" 'значение для нераcпределенного ПК 
strUserName = objComputer.UserName 
strParamComputerName = objComputer.Name 
Select Case objComputer.DomainRole  
Case 0 strComputerRole = "01"'"Standalone Workstation" одиночный ПК 
Case 1 strComputerRole = "02"'"Member Workstation" доменный ПК 
Case 2 strComputerRole = "11"'"Standalone Server" одиночный сервер 
Case 3 strComputerRole = "12"'"Member Server" - сервер домена 
Case 4 strComputerRole = "13"'"Backup Domain Controller" - Сервер BDC 
Case 5 strComputerRole = "14"'"Primary Domain Controller" - Сервер PDC 
End Select 
Next 
If ResultReWrite = 0 Then 
strFileSoftwareAudit = strPathFileResultat & "SoftwareAudit_" & strParamComputerName & "_" & strDATE &  strTime & ".txt" 
Else 
strFileSoftwareAudit = strPathFileResultat & "SoftwareAudit_" & strParamComputerName & ".txt" 
End If 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTextFile = objFSO.CreateTextFile(strFileSoftwareAudit, True) 
Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv") 
On Error Resume Next  
For Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem") 
strFull = _ 
strComputerRole & _ 
strRazdelitel & strParamComputerName & _ 
strRazdelitel & strMACadress & _ 
strRazdelitel & strUserName & _ 
strRazdelitel & objOS.Caption & _ 
strRazdelitel & objOS.Version & _ 
strRazdelitel & Mid(objOS.InstallDate,1,8) & _ 
strRazdelitel & objOS.SerialNumber & _ 
strRazdelitel & GetKey(oWS.RegRead("HKLM\" & strWinkey & "\" & strSearchKey(9))) 
If strFull <> "" Then objTextFile.WriteLine strFull End If            
Next 
'назначение ПК (01,02 - ПК, 11,12,13,14 - сервер) 
'сетевое имя ПК 
'MAC адрес ПК 
'пользователь ПК (текущий на момент аудита) 
'лицензионное наименование ПО 
'версия ПО 
'дата установки ПО 
'PID ПО 
'лицензионный ключ ПО 
objReg.EnumKey HKEY_LOCAL_MACHINE, strRegKey, arrSubkeys 
For Each strSubkey In arrSubkeys 
If objReg.GetStringValue(HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(1), strValue1) <> 0 Then  
objReg.GetStringValue HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(2), strValue1   
End If  
objReg.GetStringValue HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(3), strValue2 
objReg.GetDWORDValue  HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(5), intValue3 
objReg.GetDWORDValue  HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(6), intValue4 
objReg.GetDWORDValue  HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(7), intValue5 
objReg.GetStringValue HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(8), intValue6 
objReg.GetStringValue HKEY_LOCAL_MACHINE, strRegKey & strSubkey, strSearchKey(10), intValue10 
If strValue1 <> ""  Then    
For i = 0 To sSoftware_i 
If strValue1 = sSoftware(i,3) Or intValue6 = sSoftware(i,1)  Then  
strKey_soft = sSoftware(i,2)  
intValue6 = sSoftware(i,1) 
End If 
Next 
End If 
If intValue10 = "" Then intValue10 = intValue3 & "." & intValue4  End If 
strFull = _ 
strComputerRole & _ 
strRazdelitel & strParamComputerName & _ 
strRazdelitel & strMACadress & _         
strRazdelitel & strUserName & _ 
strRazdelitel & strValue1 & _ 
strRazdelitel & intValue10 & _ 
strRazdelitel & strValue2 & _ 
strRazdelitel & intValue6 & _ 
strRazdelitel & strKey_soft 
If strValue1 <> "" Then objTextFile.WriteLine strFull End If 
strKey_soft = "" 
intValue6 = "" 
'назначение ПК (01,02 - ПК, 11,12,13,14 - сервер) 
'сетевое имя ПК 
'MAC адрес ПК 
'пользователь ПК (текущий на момент аудита) 
'лицензионное наименование ПО 
'версия ПО 
'дата установки ПО 
'PID ПО 
'лицензионный ключ ПО 
Next 
objTextFile.Close 
Cleanup() 
Sub Cleanup() 
Set oWS = Nothing 
Set oFSO = Nothing 
WScript.Quit 
End Sub 
 
Function GetKey(rpk) 
 
Dim szPossibleChars, dwAccumulator, j, i, szProductKey 
Const rpkOffset=52:i=28 
szPossibleChars="BCDFGHJKMPQRTVWXY2346789"  
Do 'Rep1 
dwAccumulator=0 : j=14 
Do   
dwAccumulator=dwAccumulator*256   
dwAccumulator=rpk(j+rpkOffset)+dwAccumulator 
rpk(j+rpkOffset)=(dwAccumulator\24) and 255  
dwAccumulator=dwAccumulator Mod 24 
j=j-1 
Loop While j>=0 
i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey 
if (((29-i) Mod 6)=0) And (i<>-1) then   
i=i-1 : szProductKey="-"&szProductKey 
End If 
Loop While i>=0 'Goto Rep1  
GetKey=szProductKey 
End Function 
 
Function FormatNum(NumVal) 
strNum = Trim(NumVal) 
If Len(strNum) = 1 Then strNum = "0" + strNum 
FormatNum = strNum 
End Function 
 
Function DateFormat(DateVal) 
strNY = FormatNum(Year(DateVal)) 
strNM = FormatNum(Month(DateVal)) 
strND = FormatNum(Day(DateVal)) 
'DateFormat = strNY + "_" + strNM + "_" + strND 
DateFormat = strNY + strNM + strND 
End Function 
 
Function TimeFormat(TimeVal) 
strNH = FormatNum(Hour(TimeVal)) 
strNMin = FormatNum(Minute(TimeVal)) 
strNS = FormatNum(Second(TimeVal)) 
'TimeFormat = strNH + "_" + strNMin + "_" + strNS 
TimeFormat = strNH + strNMin + strNS 
End Function 
 
Function GetDataReg (ssRegTitle) 
Dim sID_soft, sKey_soft, sName_soft 
sID_soft = "" 
sKey_soft = "" 
sName_soft = "" 
sRegTitle = ssRegTitle 
Select Case Mid(sRegTitle, 1, InStr(1,sRegTitle,"\")-1) 
Case "HKEY_CURRENT_USER" 
shDefKey=HKEY_CURRENT_USER 
Case "HKEY_USERS" 
shDefKey=HKEY_USERS 
Case "HKEY_LOCAL_MACHINE" 
shDefKey=HKEY_LOCAL_MACHINE 
Case "HKEY_CLASSES_ROOT" 
shDefKey=HKEY_CLASSES_ROOT 
Case "HKEY_CURRENT_CONFIG" 
shDefKey=HKEY_CURRENT_CONFIG 
End Select  
If objReg.EnumValues (shDefKey, Mid(sRegTitle, InStr(1,sRegTitle,"\")+1, Len(sRegTitle)-InStr(1,sRegTitle,"\")), arrEntryNames, arrValueTypes) = 0 Then 
For ii=0 To UBound(arrEntryNames) 
If (LCase(arrEntryNames(ii)) = LCase(strSearchKey(8))) And (arrValueTypes(ii)= 1) Then  
sID_soft = oWS.RegRead(sRegTitle & "\" & strSearchKey(8)) 
End If 
If (LCase(arrEntryNames(ii)) =  LCase(strSearchKey(9))) And (arrValueTypes(ii)= 3) Then 
sKey_soft = GetKey(oWS.RegRead(sRegTitle & "\" & strSearchKey(9))) 
End If 
If (LCase(arrEntryNames(ii)) =  LCase(strSearchKey(11))) And (arrValueTypes(ii)= 1) Then 
sName_soft = oWS.RegRead(sRegTitle & "\" & strSearchKey(11)) 
End If 
Next 
End If 
If (sID_soft <> "") And (sKey_soft <> "") Then 
sSoftware(sSoftware_i,1) = sID_soft 
sSoftware(sSoftware_i,2) = sKey_soft 
sSoftware(sSoftware_i,3) = sName_soft 
sSoftware_i = sSoftware_i + 1 
End If 
End Function


Плюс за одно покажет какие проги установленны
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:56, 29-01-2012 | #3