|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт по сбору инфы о железе (помогите добавить нужное) |
|
VBS/WSH/JS - [решено] Скрипт по сбору инфы о железе (помогите добавить нужное)
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать
Народ подскажите плиз!
Есть скрипт по сбору железа всё замечательно работает, но нет информации о мониторе (модель, серийный номер), и принтере (серийный номер), помогите дописать пожалуйста (в скриптах полный 0). Пробовал отписаться автору он молчит , а скриптик хороший давно такой искал. P.S. Надеюсь автор не сочтет за плагиат 'Инвентаризация компьютеров средствами WMI и VBScript (29.07.2009) 'Данные выводятся в отдельный файл CSV для последующей сборки общего отчета 'Подробности - см. http://zheleznov.info/invent_comp.htm 'Автор: Павел Железнов '== НАСТРОЙКИ 'режим работы 'Const SILENT = False 'тихий режим отключен, будет запрошено имя компьютера Const SILENT = True 'режим отчета о локальном компьютере без вывода диалогов 'где сохранять отчет 'Const DATA_DIR = "comp\" 'локальный каталог + "\" в конце Const DATA_DIR = "\\10.xxx.xxx.xxx\Report$\Invent\comp\" 'сетевой ресурс + "\" в конце 'прочее Const TITLE = "Инвентаризация компьютеров" 'заголовок диалоговых окон Const DATA_EXT = ".csv" 'расширение файла отчета Const HEAD_LINE = True 'выводить заголовки в первой строке CSV-файла 'не завершать скрипт аварийно 'закомментировать на время отладки On Error Resume Next '== ВЫПОЛНЕНИЕ 'объект для доступа к файловой системе Dim fso Set fso = CreateObject("Scripting.FileSystemObject") 'объект WMI Dim wmio 'файл отчета Dim tf 'узнать имя локального компьютера Dim nwo, comp Set nwo = CreateObject("WScript.Network") comp = LCase(nwo.ComputerName) 'запросить имя удаленного компьютера If Not SILENT Then comp = InputBox("Введите имя компьютера:", TITLE, comp) 'проверить доступность компьютера If Unavailable(comp) Then MsgBox "Компьютер недоступен:" & vbCrLf & comp, vbExclamation, TITLE comp = "" End If End If 'провести инвентаризацию If Len(comp) > 0 Then InventComp(comp) 'если ошибка If Len(Err.Description) > 0 Then _ If Not SILENT Then MsgBox comp & vbCrLf & "Ошибка:" & vbCrLf & Err.Description, vbExclamation, TITLE '== ПОДПРОГРАММЫ 'инвентаризация компьютера, заданного сетевым именем или IP-адресом 'сохранение отчета с указанным именем Sub InventComp(compname) Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\" & compname & "\Root\CIMV2") 'некоторые WMI-классы поддерживаются не во всех версиях Windows Dim build build = BuildVersion() 'файл отчета Set tf = fso.CreateTextFile(DATA_DIR & compname & DATA_EXT, True) 'первая строка - заголовки If HEAD_LINE Then tf.WriteLine "Секция отчета;Параметр;Номер экземпляра;Значение" 'дата проверки tf.WriteLine "Компьютер;Дата проверки;1;" & Now Log "Win32_ComputerSystemProduct", _ "UUID", "", _ "Компьютер", _ "UUID" Log "Win32_ComputerSystem", _ "Name,Domain,PrimaryOwnerName,UserName,TotalPhysicalMemory", "", _ "Компьютер", _ "Сетевое имя,Домен,Владелец,Текущий пользователь,Объем памяти (Мб)" Log "Win32_OperatingSystem", _ "Caption,Version,CSDVersion,Description,RegisteredUser,SerialNumber,Organization,InstallDate", "", _ "Операционная система", _ "Наименование,Версия,Обновление,Описание,Зарегистрированный пользователь,Серийный номер,Организация,Дата установки" Log "Win32_BaseBoard", _ "Manufacturer,Product,Version,SerialNumber", "", _ "Материнская плата", _ "Производитель,Наименование,Версия,Серийный номер" Log "Win32_BIOS", _ "Manufacturer,Name,SMBIOSBIOSVersion,SerialNumber", "", _ "BIOS", _ "Производитель,Наименование,Версия,Серийный номер" 'не определяется Core 2 в XP SP2, см. http://support.microsoft.com/kb/953955 Log "Win32_Processor", _ "Name,Caption,CurrentClockSpeed,ExtClock,L2CacheSize,SocketDesignation,UniqueId", "", _ "Процессор", _ "Наименование,Описание,Частота (МГц),Частота FSB (МГц),Размер L2-кеша (кб),Разъем,UID" Log "Win32_PhysicalMemory", _ "Capacity,Speed,DeviceLocator", "", _ "Модуль памяти", _ "Размер (Мб),Частота,Размещение" 'пропускаются USB-диски Log "Win32_DiskDrive", _ "Model,Size,InterfaceType", "InterfaceType <> 'USB'", _ "Диск", _ "Наименование,Размер (Гб),Интерфейс" 'только локальные диски 'пропускаются USB-диски, размер которых обычно NULL Log "Win32_LogicalDisk", _ "Name,FileSystem,Size,FreeSpace,VolumeSerialNumber", "DriveType = 3 AND Size IS NOT NULL", _ "Логический диск", _ "Наименование,Файловая система,Размер (Гб),Свободно (Гб),Серийный номер" Log "Win32_CDROMDrive", _ "Name", "", _ "CD-привод", _ "Наименование" 'только для XP/2003 и выше 'пропускаются "двойники", имеющие в названии слово "Secondary" If build >= 2600 Then Log "Win32_VideoController", _ "Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion", "NOT (Name LIKE '%Secondary')", _ "Видеоконтроллер", _ "Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера" Else 'для Windows 2000 Log "Win32_VideoController", _ "Name,AdapterRAM,VideoProcessor,VideoModeDescription,DriverDate,DriverVersion", "", _ "Видеоконтроллер", _ "Наименование,Объем памяти (Мб),Видеопроцессор,Режим работы,Дата драйвера,Версия драйвера" End If 'только для XP/2003 и выше 'пропускаются отключенные сетевые адаптеры, в том числе минипорты 'пропускаются виртуальные адаптеры VMware If build >= 2600 Then Log "Win32_NetworkAdapter", _ "Name,AdapterType,PermanentAddress,MACAddress", "NetConnectionStatus > 0 AND NOT (Name LIKE 'VMware%')", _ "Сетевой адаптер", _ "Наименование,Тип,IP-адрес,MAC-адрес" Else 'для Windows 2000 Log "Win32_NetworkAdapter", _ "Name,PermanentAddress,MACAddress", "", _ "Сетевой адаптер", _ "Наименование,IP-адрес,MAC-адрес" End If Log "Win32_SoundDevice", _ "Name", "", _ "Звуковое устройство", _ "Наименование" Log "Win32_SCSIController", _ "Name", "", _ "SCSI контроллер", _ "Наименование" 'только для XP/2003 и выше 'пропускаются сетевые принтеры 'условия "Local = True Or Network = False" недостаточно для принт-серверов, поэтому проверяется порт If build >= 2600 Then Log "Win32_Printer", _ "Name,PortName,ShareName", "(Local = True OR Network = False) AND (PortName LIKE '%USB%' OR PortName LIKE '%LPT%')", _ "Принтер", _ "Наименование,Порт,Сетевое имя" End If Log "Win32_PortConnector", _ "ExternalReferenceDesignator,InternalReferenceDesignator", "", _ "Разъем порта", _ "Внешний,Внутренний" Log "Win32_Keyboard", _ "Name,Description", "", _ "Клавиатура", _ "Наименование,Описание" Log "Win32_PointingDevice", _ "Name", "", _ "Мышь", _ "Наименование" 'закрыть файл tf.Close If Not SILENT Then MsgBox "Отчет сохранен в файл:" & vbCrLf & DATA_DIR & compname & DATA_EXT, vbInformation, TITLE End Sub 'составить WQL-запрос, выполнить и записать строку в CSV-файл 'входные параметры: 'from - класс WMI 'sel - свойства WMI, через запятую 'where - условие отбора или пустая строка 'sect - соответствующая секция отчета 'param - соответствующие параметры внутри секции отчета, через запятую 'для отображения в кратных единицах, нужно их указать в скобках Sub Log(from, sel, where, sect, param) Const RETURN_IMMEDIATELY = 16 Const FORWARD_ONLY = 32 Dim query, cls, item, prop query = "Select " & sel & " From " & from If Len(where) > 0 Then query = query & " Where " & where Set cls = wmio.ExecQuery(query,, RETURN_IMMEDIATELY + FORWARD_ONLY) Dim props, names, num, value props = Split(sel, ",") names = Split(param, ",") num = 1 'номер экземпляра For Each item In cls For i = 0 To UBound(props) 'взять значение Set prop = item.Properties_(props(i)) value = prop.Value 'без проверки на Null возможнен вылет с ошибкой If IsNull(value) Then value = "" 'если тип данных - массив, собрать в строку ElseIf IsArray(value) Then value = Join(value,",") 'если указана кратная единица измерения, перевести значение ElseIf Right(names(i), 4) = "(Мб)" Then value = CStr(Round(value / 1024 ^ 2)) ElseIf Right(names(i), 4) = "(Гб)" Then value = CStr(Round(value / 1024 ^ 3)) 'если тип данных - дата, преобразовать в читаемый вид ElseIf prop.CIMType = 101 Then value = ReadableDate(value) End If 'вывести в файл непустое значение, заменить спецсимвол ";" value = Trim(Replace(value, ";", "_")) If Len(value) > 0 Then tf.WriteLine sect & ";" & names(i) & ";" & num & ";" & value Next 'i 'перейти к следующему экземпляру num = num + 1 Next 'item End Sub 'преобразование даты формата DMTF в читаемый вид (ДД.ММ.ГГГГ) 'http://msdn.microsoft.com/en-us/library/aa389802.aspx Function ReadableDate(str) 'объект недоступен в Windows 2000, поэтому см. далее ' Dim dto ' Set dto = CreateObject("WbemScripting.SWbemDateTime") ' dto.Value = str ' ReadableDate = dto.GetVarDate(True) ReadableDate = Mid(str, 7, 2) & "." & Mid(str, 5, 2) & "." & Left(str, 4) End Function 'узнать версию (билд) WMI-сервера 'вернуть целое число Function BuildVersion() Dim cls, item Set cls = wmio.ExecQuery("Select BuildVersion From Win32_WMISetting") For Each item In cls BuildVersion = CInt(Left(item.BuildVersion, 4)) Next End Function 'проверить доступность компьютера в сети 'вернуть True, если адрес недоступен Function Unavailable(addr) Dim wmio, ping, p Set wmio = GetObject("WinMgmts:{impersonationLevel=impersonate}") Set ping = wmio.ExecQuery("SELECT StatusCode FROM Win32_PingStatus WHERE Address = '" & addr & "'") For Each p In ping If IsNull(p.StatusCode) Then Unavailable = True Else Unavailable = (p.StatusCode <> 0) End If Next End Function |
|
Отправлено: 14:41, 17-04-2011 |
Пользователь Сообщения: 132
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ZeVSalt:
|
|
------- Отправлено: 08:51, 28-09-2020 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6484
|
Профиль | Отправить PM | Цитировать Есть программка, называется WinAudit. Она умеет работать с командной строкой и выгружать отчёты.
В ней имеется прекрасная встроенная справка, где расписаны все ключи командной строки. Powershell: # Выгрузка общих данных системы и сведений о видеоадаптерах и мониторах: & ./WinAudit.exe /r=gDa /f=$($env:computername).csv2 /T=datetime # Импорт отчёта и выборка сведений о мониторах - один из вариантов Import-Csv "./$($env:computername)-*.csv2" -Encoding default | ? categoryname -eq "Параметры монитора" |select ItemValue |
------- Отправлено: 10:53, 28-09-2020 | #12 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Wireless - [решено] Помогите выбрать нужное оборудование | Vlademort | Сетевое оборудование | 7 | 24-03-2011 12:06 | |
VBS/WSH/JS - Добавить строку в VBS скрипт | antonhacktm | Скриптовые языки администрирования Windows | 5 | 14-12-2009 18:40 | |
Нужна програма для автоматического скачивание из интернета в нужное время нужное мест | Месроп | Хочу все знать | 6 | 10-12-2009 21:19 | |
Прочее - Помогите сделать скрипт <из контейнера AD добавить файл *.dll по определенному пути> | chernikov72 | Программирование и базы данных | 3 | 07-04-2009 20:20 | |
помогите в чем проблема в винде или железе | mishanya | Microsoft Windows 95/98/Me (архив) | 2 | 04-11-2002 12:38 |
|