|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - доработка скрипта |
|
VBS/WSH/JS - доработка скрипта
|
Новый участник Сообщения: 26 |
Профиль | Отправить PM | Цитировать Народ, поможите, сам со скриптами никак, есть скрипт по сбору инфы об аппаратном обеспечении компа, за основу взят скрипт Павла Железнова, он выдает отчет такого вида:
Секция отчета;Параметр;Номер экземпляра;Значение Компьютер;Дата проверки;1;13.09.2011 17:33:09 Компьютер;UUID;1;03000200-0400-0500-0006-000700080009 Компьютер;Сетевое имя;1;Zхххххххххх Компьютер;Домен;1;W2K3 Компьютер;Владелец;1;Zхххххххххх Компьютер;Текущий пользователь;1;Zхххххххххх\Zхххххххххх Компьютер;Объем памяти (Мб);1;1719 Операционная система;Наименование;1;Microsoft Windows 7 Максимальная Операционная система;Версия;1;6.1.7601 Операционная система;Обновление;1;Service Pack 1 Операционная система;Зарегистрированный пользователь;1;Zхххххххххх Операционная система;Серийный номер;1;ххххххххххххххххххххххххххххх Операционная система;Дата установки;1;24.03.2011 Материнская плата;Производитель;1;ASRock Материнская плата;Наименование;1;H55M-LE BIOS;Производитель;1;American Megatrends Inc. BIOS;Наименование;1;Default System BIOS BIOS;Версия;1;P1.00 BIOS;Серийный номер;1;To Be Filled By O.E.M. Процессор;Наименование;1;Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz Процессор;Описание;1;x64 Family 6 Model 37 Stepping 2 Процессор;Частота (МГц);1;2933 Процессор;Частота FSB (МГц);1;133 Процессор;Размер L2-кеша (кб);1;1024 Процессор;Разъем;1;CPUSocket Модуль памяти;Размер (Мб);1;2048 Модуль памяти;Размещение;1;DIMM0 Диск;Наименование;1;Hitachi HDS721050CLA362 ATA Device Диск;Размер (Гб);1;466 Диск;Интерфейс;1;IDE Логический диск;Наименование;1;C: Логический диск;Файловая система;1;NTFS Логический диск;Размер (Гб);1;100 Логический диск;Свободно (Гб);1;71 Логический диск;Серийный номер;1;F43F226F Логический диск;Наименование;2;D: Логический диск;Файловая система;2;NTFS Логический диск;Размер (Гб);2;366 Логический диск;Свободно (Гб);2;174 Логический диск;Серийный номер;2;4D360F39 CD-привод;Наименование;1;ATAPI iHAS124 Y ATA Device Видеоконтроллер;Наименование;1;Intel(R) HD Graphics Видеоконтроллер;Объем памяти (Мб);1;732 Видеоконтроллер;Видеопроцессор;1;Intel(R) HD Graphics (Core i3) Видеоконтроллер;Режим работы;1;1440 x 900 x 4294967296 colors Видеоконтроллер;Дата драйвера;1;11.02.2011 Видеоконтроллер;Версия драйвера;1;8.15.10.2302 Монитор;Наименование;;AOC/919W Монитор;Серийный номер;;AQGA9HA030354 Сетевой адаптер;Наименование;1;Realtek RTL8168D/8111D Family PCI-E Gigabit Ethernet NIC (NDIS 6.20) Сетевой адаптер;Тип;1;Ethernet 802.3 Сетевой адаптер;MAC-адрес;1;00:25:22:32:31:48 Звуковое устройство;Наименование;1;Устройство с поддержкой High Definition Audio Звуковое устройство;Наименование;2;Устройство с поддержкой High Definition Audio Принтер;Наименование;1;Xerox Phaser 3117 Принтер;Порт;1;USB001 Принтер;Наименование;2;HP Universal Printing PCL 6 Принтер;Порт;2;USB001 Клавиатура;Наименование;1;Enhanced (101- or 102-key) Клавиатура;Описание;1;Стандартная клавиатура PS/2 Мышь;Наименование;1;USB-устройство ввода а нужно такого: Системный блок ASRock;H55M-LE/Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz/2048/Hitachi HDS721050CLA362 ATA Device;466/ATAPI iHAS124 Y ATA Device/Intel(R) HD Graphics;732/Realtek RTL8168D/8111D Family PCI-E Gigabit Ethernet NIC Монитор AOC/919W Серийный номер AQGA9HA030354 Принтер Xerox Phaser 3117 Клавиатура Стандартная клавиатура PS/2 Мышь USB-устройство ввода помогите пожалуйста. если кто то сможет что бы выдергивался серийник принтера, буду премного благодарен скрипт: '== НАСТРОЙКИ 'режим работы 'Const SILENT = False 'тихий режим отключен, будет запрошено имя компьютера Const SILENT = True 'режим отчета о локальном компьютере без вывода диалогов 'где сохранять отчет Const DATA_DIR = "\Report\Invent\comp\" 'локальный каталог + "\" в конце 'Const DATA_DIR = "\\ххх.ххх.ххх.ххх\Report$\Invent\comp\" 'сетевой ресурс + "\" в конце 'прочее Const TITLE = "Инвентаризация компьютеров" 'заголовок диалоговых окон Const DATA_EXT = ".txt" 'расширение файла отчета 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 ' Log "Win32_DesktopMonitor", _ ' "PNPDeviceID", "", _ ' "Монитор", _ ' "Наименование (PNP)" strComputer="." dim strarrRawEDID() intMonitorCount=0 Const HKLM = &H80000002 Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "/root/default:StdRegProv") sBaseKey = "SYSTEM\CurrentControlSet\Enum\DISPLAY\" iRC = oRegistry.EnumKey(HKLM, sBaseKey, arSubKeys) For Each sKey In arSubKeys sBaseKey2 = sBaseKey & sKey & "\" iRC2 = oRegistry.EnumKey(HKLM, sBaseKey2, arSubKeys2) For Each sKey2 In arSubKeys2 oRegistry.GetMultiStringValue HKLM, sBaseKey2 & sKey2 & "\", "HardwareID", sValue for tmpctr=0 to ubound(svalue) if lcase(left(svalue(tmpctr),8))="monitor\" then sBaseKey3 = sBaseKey2 & sKey2 & "\" iRC3 = oRegistry.EnumKey(HKLM, sBaseKey3, arSubKeys3) For Each sKey3 In arSubKeys3 if skey3="Control" then oRegistry.GetBinaryValue HKLM, sbasekey3 & "Device Parameters\", "EDID", arrintEDID if vartype(arrintedid) <> 8204 then strRawEDID="EDID Not Available" else for each bytevalue in arrintedid strRawEDID=strRawEDID & chr(bytevalue) next end if redim preserve strarrRawEDID(intMonitorCount) strarrRawEDID(intMonitorCount)=strRawEDID intMonitorCount=intMonitorCount+1 end if next end if next Next Next dim arrMonitorInfo() redim arrMonitorInfo(intMonitorCount-1,5) dim location(3) for tmpctr=0 to intMonitorCount-1 if strarrRawEDID(tmpctr) <> "EDID Not Available" then location(0)=mid(strarrRawEDID(tmpctr),&H36+1,18) location(1)=mid(strarrRawEDID(tmpctr),&H48+1,18) location(2)=mid(strarrRawEDID(tmpctr),&H5a+1,18) location(3)=mid(strarrRawEDID(tmpctr),&H6c+1,18) strSerFind=chr(&H00) & chr(&H00) & chr(&H00) & chr(&Hff) strMdlFind=chr(&H00) & chr(&H00) & chr(&H00) & chr(&Hfc) intSerFoundAt=-1 intMdlFoundAt=-1 for findit = 0 to 3 if instr(location(findit),strSerFind)>0 then intSerFoundAt=findit end if if instr(location(findit),strMdlFind)>0 then intMdlFoundAt=findit end if next if intSerFoundAt<>-1 then tmp=right(location(intSerFoundAt),14) if instr(tmp,chr(&H0a))>0 then tmpser=trim(left(tmp,instr(tmp,chr(&H0a))-1)) else tmpser=trim(tmp) end if if left(tmpser,1)=chr(0) then tmpser=right(tmpser,len(tmpser)-1) else tmpser="Serial Number Not Found in EDID data" end if if intMdlFoundAt<>-1 then tmp=right(location(intMdlFoundAt),14) if instr(tmp,chr(&H0a))>0 then tmpmdl=trim(left(tmp,instr(tmp,chr(&H0a))-1)) else tmpmdl=trim(tmp) end if if left(tmpmdl,1)=chr(0) then tmpmdl=right(tmpmdl,len(tmpmdl)-1) else tmpmdl="Model Descriptor Not Found in EDID data" end if tmpmfgweek=asc(mid(strarrRawEDID(tmpctr),&H10+1,1)) tmpmfgyear=(asc(mid(strarrRawEDID(tmpctr),&H11+1,1)))+1990 tmpmdt=month(dateadd("ww",tmpmfgweek,datevalue("1/1/" & tmpmfgyear))) & "/" & tmpmfgyear tmpEDIDMajorVer=asc(mid(strarrRawEDID(tmpctr),&H12+1,1)) tmpEDIDRev=asc(mid(strarrRawEDID(tmpctr),&H13+1,1)) tmpver=chr(48+tmpEDIDMajorVer) & "." & chr(48+tmpEDIDRev) tmpEDIDMfg=mid(strarrRawEDID(tmpctr),&H08+1,2) Char1=0 : Char2=0 : Char3=0 Byte1=asc(left(tmpEDIDMfg,1)) Byte2=asc(right(tmpEDIDMfg,1)) if (Byte1 and 64) > 0 then Char1=Char1+16 if (Byte1 and 32) > 0 then Char1=Char1+8 if (Byte1 and 16) > 0 then Char1=Char1+4 if (Byte1 and 8) > 0 then Char1=Char1+2 if (Byte1 and 4) > 0 then Char1=Char1+1 if (Byte1 and 2) > 0 then Char2=Char2+16 if (Byte1 and 1) > 0 then Char2=Char2+8 if (Byte2 and 128) > 0 then Char2=Char2+4 if (Byte2 and 64) > 0 then Char2=Char2+2 if (Byte2 and 32) > 0 then Char2=Char2+1 Char3=Char3+(Byte2 and 16) Char3=Char3+(Byte2 and 8) Char3=Char3+(Byte2 and 4) Char3=Char3+(Byte2 and 2) Char3=Char3+(Byte2 and 1) tmpmfg=chr(Char1+64) & chr(Char2+64) & chr(Char3+64) tmpEDIDDev1=hex(asc(mid(strarrRawEDID(tmpctr),&H0a+1,1))) tmpEDIDDev2=hex(asc(mid(strarrRawEDID(tmpctr),&H0b+1,1))) if len(tmpEDIDDev1)=1 then tmpEDIDDev1="0" & tmpEDIDDev1 if len(tmpEDIDDev2)=1 then tmpEDIDDev2="0" & tmpEDIDDev2 tmpdev=tmpEDIDDev2 & tmpEDIDDev1 arrMonitorInfo(tmpctr,0)=tmpmfg arrMonitorInfo(tmpctr,1)=tmpdev arrMonitorInfo(tmpctr,2)=tmpmdt arrMonitorInfo(tmpctr,3)=tmpser arrMonitorInfo(tmpctr,4)=tmpmdl arrMonitorInfo(tmpctr,5)=tmpver end if next for tmpctr=0 to intMonitorCount-1 if arrMonitorInfo(tmpctr,3) <> "" Then tf.WriteLine "Монитор;Наименование;;" & arrMonitorInfo(tmpctr,0) & "/" & arrMonitorInfo(tmpctr,4) tf.WriteLine "Монитор;Серийный номер;;" & arrMonitorInfo(tmpctr,3) End If next 'только для 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, a 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 Right(names(i), 5) = "(PNP)" Then 'value = "DISPLAY\AOC1919\5&2BC3DC50&0&UID5243137" a = Split(value, "\", 3) If UBound(a) > 0 Then value = a(1) Else value = "?" End If 'если тип данных - дата, преобразовать в читаемый вид 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 |
|
Отправлено: 13:09, 21-09-2011 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата ZeVSalt:
Цитата:
|
|||
------- Отправлено: 00:50, 22-09-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать отчет нужно сохранить в txt, у меня написан модуль обработки 1С, для внесения в базу конфигурации компьютера, и там структура данных должна быть следующая:
Системный блок ASRock;H55M-LE/Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz/2048/Hitachi HDS721050CLA362 ATA Device;466/ATAPI iHAS124 Y ATA Device/Intel(R) HD Graphics;732/Realtek RTL8168D/8111D Family PCI-E Gigabit Ethernet NIC Монитор AOC/919W Серийный номер AQGA9HA030354 Принтер Xerox Phaser 3117 Клавиатура Стандартная клавиатура PS/2 Мышь USB-устройство ввода а серийник принтера этот скрипт не выдергивает |
Отправлено: 09:51, 22-09-2011 | #3 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Ваша более ранняя тема - Изменение скрипта по сбору инфы по железу. Пожалуйста, не дублируйте темы.
Закрыто. |
------- Отправлено: 22:33, 23-09-2011 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - доработка javascript | Михаил11 | Скриптовые языки администрирования Windows | 1 | 08-04-2011 11:29 | |
Прочее - Доработка напильником сети с двумя хабами, роутером и терминалами | petrov1993 | Сетевые технологии | 2 | 13-11-2010 22:35 | |
Доработка радиатора (soc478) | Santelintey | Разгон, охлаждение и моддинг | 12 | 18-07-2010 19:12 | |
2008 - Доработка windows 2008 программой vlite | Solo the human | Windows Server 2008/2008 R2 | 0 | 07-03-2010 22:26 | |
Разное - C# - доработка программы для пинга серверов | AVADDON89 | Программирование и базы данных | 4 | 30-11-2009 11:27 |
|