Скачать скрипт
' Три способа передачи списка ПК:
FList = "comp.list" ' 1-й способ: через текстовый файл со строками, начинающимися с ip-адресов компов
'Addresses = "192.168.0.3;192.168.0.4" ' 2-й способ: через строку с ip-адресами компов, разделёнными ;
RangeStart = "192.168.0.2" ' 3-й способ: через указание начала...
RangeEnd = "192.168.0.7" ' ... и окончания диапазона (для применения этого способа закомментировать строку с Addresses = )
Const ForReading = 1
Const ForWriting = 2
'On Error Resume Next
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description ' При возникновении ошибки - ее вывод с номером строки
WScript.Quit ' и окончание работы скрипта
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set FFail = objFSO.OpenTextFile("not_responding.txt", ForWriting, True) ' Список ПК, которые не пингуются
If objFSO.FileExists(FList) Then ' 1-й способ
Set FSource = objFSO.OpenTextFile("comp.list", ForReading, True)
Do While FSource.AtEndOfStream <> True
Addr = Trim(FSource.ReadLine)
Pos = InStr(Addr,"//")
If Pos <> 0 Then
Addr = Trim(Left(Addr,Pos-2))
End If
Info(Addr)
Loop
FSource.Close
Else
If Len(Addresses) <> 0 Then ' 2-й способ
aAddress = Split(Addresses, ";")
For Each Addr in aAddress
Info(Addr)
Next
Else ' 3-й способ
PosRS = InStrRev(RangeStart,".")
PosRE = InStrRev(RangeEnd,".")
Net = Left(RangeStart,PosRS)
StartNum = CInt(Mid(RangeStart,PosRS+1))
EndNum = CInt(Mid(RangeEnd,PosRE+1))
For i = StartNum To EndNum
Addr = Net + Trim(CStr(i))
Info(Addr)
Next
End If
End If
FFail.Close
MsgBox "Сбор информации окончен"
Sub Info(ByVal CompName)
' Попытка пропинговать ПК
For Each objStatus In GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("Select * From Win32_PingStatus Where Address = '" & CompName & "'")
Exit For
Next
If IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then
FFail.WriteLine CompName ' Пинг не удался - запись в not_responding.txt
Exit Sub
End If
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" + CompName + "\root\CIMV2")
Set FTemp = objFSO.OpenTextFile(CompName+".txt", ForWriting, True) ' Запись информации в текстовый файл с названием по имени ПК
FTemp.WriteLine CompName + ": " + vbCrLf
FTemp.WriteLine "Мат.плата|Процесор:"
For Each objObject In objService.ExecQuery("SELECT * FROM Win32_BaseBoard")
Exit For
Next
stro = objObject.Manufacturer + " " + objObject.Product + vbCrLf
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Processor")
stro = stro + objProc.SocketDesignation + " / " + Trim(objProc.Name) + vbCrLf
Next
FTemp.WriteLine(stro)
FTemp.WriteLine "Монитор:"
stro = ""
For Each objMon In objService.ExecQuery("SELECT * FROM Win32_DesktopMonitor")
stro = stro + objMon.Caption + vbCrLf
Next
FTemp.WriteLine(stro) ' Полезная информация будет только в случае установки драйверов на монитор
FTemp.WriteLine "ОЗУ|HDD"
stro = ""
For Each objPhMem In objService.ExecQuery("SELECT * FROM Win32_PhysicalMemory")
stro = stro + objPhMem.DeviceLocator + ": " + CStr(objPhMem.Capacity/1048576) + " МБ" + vbCrLf
Next
For Each objDisk In objService.ExecQuery("SELECT * FROM Win32_DiskDrive")
stro = stro + objDisk.Caption + " / " + objDisk.InterfaceType + " / " + CStr(Round(objDisk.Size/1073741824,0)) + " ГБ" + vbCrLf
Next
FTemp.WriteLine(stro)
FTemp.WriteLine "Использование дисков:"
stro = ""
' Только для HDD
For Each objDisk In objService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3")
pctFreeSpace = objDisk.FreeSpace / objDisk.Size
stro = stro + objDisk.Name + " " + FormatPercent(pctFreeSpace) + vbCrLf
Next
FTemp.WriteLine(stro)
FTemp.WriteLine "Видео:"
stro = ""
For Each objVideo In objService.ExecQuery("SELECT * FROM Win32_VideoController")
stro = stro + objVideo.Caption + vbCrLf
Next
FTemp.WriteLine(stro)
FTemp.WriteLine "Сеть:"
stro = ""
' Для типа адаптера - Ethernet 802.3
For Each objNtw In objService.ExecQuery("SELECT * FROM Win32_NetworkAdapter Where AdapterTypeID = 0")
stro = stro + objNtw.Caption + ", MAC: " + objNtw.MACAddress + vbCrLf
Next
FTemp.WriteLine(stro)
FTemp.WriteLine "ОС:"
For Each objOS In objService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
Exit For
Next
stro = objOS.Caption + " " + objOS.Version + " " + objOS.CSDVersion
FTemp.WriteLine(stro)
FTemp.Close
End Sub |