Но вот одна заковыка. Сейчас пишу для работы скрипт, который выводит конфигурацию (основные элементы) компьютера, но вот не могу получить имя производителя диска. Постоянно пишет фигню про стандартный диск.
Вот скрипт.
- Код: Выделить всё
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 3.0
'
' NAME: CompConfig
'
' AUTHOR: Demidow Ruslan
' DATE : 04.07.2005
'
' COMMENT: Получает общие данные о конфигурации компьютера
'
'==========================================================================
'Win32_Processor - Данные процессора
'Win32_VideoConfiguration - Конфигурация видео
'Win32_LogicalMemoryConfiguration - Конфигурация памяти
'Win32_Printer - Конфигурация принтеров
'Win32_NetworkAdapterConfiguration - Конфигурация сетевых контроллеров
'Win32_NetworkAdapter - коллекция сетевых адаптеров
'Win32_NetworkLoginProfile - Сетевая конфигурация пользователя
'Win32_DiskDrive - Данные о жёстких дисках
'Win32_FloppyDrive - данные о флопиках
'Win32_CDROMDrive - Данные о сидюках
'Win32_GroupInDomain - Доменная информация пользователя
'Win32_AccountSID - Учётная запись пользователя
Option explicit
Dim Accounts, Account
Dim WMI, SQuery, S, Shell, FSO, TXT
Const DELIM_STRING = "--------------------------------"
Const FOR_READING=1
CONST FOR_WRITING=2
Const FOR_APPENDING=1
set WMI=getobject("Winmgmts:")
CreateReport
WScript.Quit(0)
Sub CreateReport
S=S & getcompdata & GetProcessorData & _
GetVideoData & GetMemoryData & _
GetPrintersData & GetNetworkAdaptersData & _
GetHardDrivesData & GetFloppyDrivesData & _
GetCDDriveData & GetUserLoginData
SaveReport "C:\CompConfig",True
End sub
Function GetProcessorData()
Dim Processors, Processor
Dim str
'Получим данные по процессору
S= "ПРОЦЕССОР:" & vbcrlf
SQuery="select * from Win32_Processor"
Set Processors=WMI.execquery(SQuery)
For Each Processor In Processors
Str=Str & "Архитектура: " & Processor.Architecture & vbcrlf
Str=Str & "Производитель: " & Processor.Manufacturer & vbcrlf
Str= Str & "Частота: " & Processor.CurrentClockSpeed & " Mhz" & vbcrlf
Str=Str & "Размер кеша второго уровня: " & Processor.L2CacheSize & " Kb" & vbcrlf
Str=Str & "Частота кеша второго уровня: " & Processor.L2CacheSpeed & " Mhz" & vbcrlf
Str=Str & "DeviceID: " & Processor.DeviceID & vbcrlf
Str=Str & "Description: " & Processor.description & vbcrlf
Str=Str & "Семейство: " & Processor.Family & vbcrlf
Str=Str & "Тип процессора: " & Processor.Level & vbcrlf
Str=Str & "Средняя величина загруженности на данный момент: " & Processor.LoadPercentage & "%" & vbcrlf
Str=Str & "Максимальное быстродействие: " & Processor.MaxClockSpeed & " Mhz" & vbcrlf
Str=Str & "Версия: " & Processor.Version & vbcrlf
Str=Str & DELIM_STRING & vbcrlf & vbcrlf
Next
getprocessordata=str
End Function
Function GetVideoData()
dim Videos,Video
Dim str, st
'Получим данные по видео конфигурации
str=str & "ВИДЕО (ТЕКУЩИЕ НАСТРОЙКИ):" & vbcrlf
SQuery="select * from Win32_VideoConfiguration"
Set Videos=WMI.execquery(SQuery)
For Each Video In Videos
With Video
str=str & "Текущее количество цветов экрана: " & video.ActualColorResolution & vbcrlf
str=str & "Чип видеоадаптера: " & Video.AdapterChipType & vbcrlf
str=str & "Изготовитель адаптера: " & Video.AdapterCompatibility & vbcrlf
str=str & "Название DAC: " & Video.AdapterDACType & vbcrlf
str=str & "Описание видеоадаптера: " & Video.AdapterDescription & vbcrlf
str=str & "Объём видеодаптера: " & Video.AdapterRAM/1048576 & " Mb" & vbcrlf
str=str & "Тип видеоадаптера: " & Video.AdapterType & vbcrlf
str=str & "Разрешение: " & video.HorizontalResolution & "x" & video.VerticalResolution & vbcrlf
str=str & "Драйвер: " & Video.InstalledDisplayDrivers & vbcrlf
str= str & "Монитор: "
St="Монитор: "
st= st & Video.MonitorManufacturer & vbcrlf
If st="Монитор: " & vbcrlf Then
str = str & "Стандартный или Plug-n-Play" & vbcrlf
else
'WScript.Echo Video.MonitorManufacturer
str= str & Video.MonitorManufacturer & vbcrlf
str=str & "Модель монитора: " & video.MonitorType & vbcrlf
End if
If Video.RefreshRate=0 Or Video.RefreshRate=1 Then
str=str & "Частота обновления экрана: По умолчанию" & vbcrlf
Else
str=str & "Частота обновления экрана: " & Video.RefreshRate & " hz" & vbcrlf
End If
str= str & DELIM_STRING & vbcrlf & vbcrlf
End with
Next
GetVideoData=str
End Function
Function GetMemoryData()
Dim Memory, Memoryes
Dim str
'Получим данные по памяти
SQuery="select * from Win32_LogicalMemoryConfiguration"
Set Memoryes=WMI.execquery(SQuery)
For Each Memory In Memoryes
str= str & "ПАМЯТЬ: " & vbcrlf
str=str & "Всего доступно: " & round((Memory.TotalPhysicalMemory+1024)/1024 ,0) & " Mb" & vbcrlf
str=str & "Описание: " & memory.Description & vbcrlf
next
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetMemoryData=str
End Function
Function GetCompData()
Dim Comp, colComp
Dim str
'Получим данные компьютера
SQuery="select * from Win32_ComputerSystem"
Set colcomp=WMI.execquery(SQuery)
str=str & "КОМПЬЮТЕР:" & VBCRLF
For Each Comp In colComp
str=str & "Имя: " & Comp.Name & vbcrlf
If comp.PartOfDomain>0 Then
str=str & "Входит в домен: " & Comp.domain & vbcrlf
Else
str=str & "Входит в рабочую группу: " & Comp.domain & vbcrlf
End if
'str=str & "Объём памяти: " & comp.TotalPhysicalMemory & vbcrlf
next
str=str & DELIM_STRING & vbcrlf & vbcrlf
getcompdata=str
End function
Function GetPrintersData()
Dim Printers, Printer
Dim str
'Получим данные по принтерам
SQuery="select * from Win32_Printer " 'where=Atributes.Local>0"
Set Printers=WMI.execquery(SQuery)
str=str & "ПРИНТЕРЫ: " & VBCRLF
For Each Printer In Printers
str=str & "' ' ' ' ' ' ' ' ' ' ' ' ' ' " & vbcrlf
str=str & "Имя: " & Printer.Name & vbcrlf
If trim(Printer.ServerName)="" Then
str= str & "Подключен к " & Printer.PortName & " (локальный)" & vbcrlf
Else
str= str & "Подключен к " & Printer.PortName & vbcrlf
str=str & "Общий доступ под именем: " & printer.ShareName & vbcrlf
End If
Next
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetPrintersData=str
End Function
Function GetNetworkAdaptersData()
Dim colAdapters, obAdapter
Dim NetwokAdapters, Adapter
Dim str
'Получим информацию по сетевым адаптерам
str=str & "СЕТЕВЫЕ АДАПТЕРЫ: " & vbcrlf
SQuery="select * from Win32_NetworkAdapter where AdapterType='Ethernet 802.3'"
Set NetwokAdapters=WMI.execquery(SQuery)
If NetwokAdapters.count>0 Then
For each Adapter In NetwokAdapters
str=str & "Имя: " & Adapter.name & vbcrlf
SQuery="select * from Win32_NetworkAdapterConfiguration Where Index=" & adapter.deviceID
Set colAdapters=WMI.execquery(SQuery)
For Each obAdapter In colAdapters
str=str & "DNSHostName: " & obAdapter.DNSHostName & vbcrlf
Next
next
End If
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetNetworkAdaptersData=str
End Function
Function GetUserLoginData()
dim NetLogin , colNetLogin
Dim str
'Получим информацию по сетевому логину пользователя
str= str & "СЕТЕВЫЕ ДАННЫЕ ПОЛЬЗОВАТЕЛЯ: " & vbcrlf
SQuery="select * from Win32_NetworkLoginProfile"
Set colNetLOgin=WMI.execquery(SQuery)
For Each NetLOgin In colNetLogin
str=str & "Логин для входа в сеть: " & NetLogin.fullname & vbcrlf
str=str & "Тип учётной записи: " & netlogin.UserType & vbcrlf
Next
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetUserLoginData=str
End Function
Function GetCDDriveData()
Dim str, ColCD, CD, i
str=str & "CD-ПРИВОДЫ:" & VBCRLF
SQuery="select * from Win32_CDROMDrive"
Set ColCD=WMI.execquery(SQuery)
str=str & "Количество: " & ColCD.count & vbcrlf
For Each CD In ColCD
i=i+1
str=str & "Диск (" & CD.MediaType & ") " & CD.Drive & vbcrlf
str=str & CD.caption & vbcrlf
Next
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetCDDriveData=str
End function
Function GetHardDrivesData()
Dim Drives, Drive, FisicalDrives, FisDrive
Dim str, Cilinder, Heads, Sectors, SectorSize
Dim colDriveMedia, DrvMedia, i
'Получим информацию о локальных дисках
str=str & "ЛОКАЛЬНЫЕ ЖЁСТКИЕ ДИСКИ:" & VBCRLF
SQuery="select * from Win32_DiskDrive"
Set drives=WMI.execquery(SQuery)
str = str & "Количество дисков: " & Drives.count & vbcrlf
For Each Drive In Drives
i=i+1
str=str & "Диск " & i & vbcrlf
str=str & "Имя диска: " & Drive.name & vbcrlf
str=str & "Тип диска: " & Drive.mediatype & vbcrlf
str=str & "Интерфейс: " & Drive.InterfaceType & vbcrlf
str=str & "Производитель: " & Drive.Manufacturer & vbcrlf
str=str & "Модель: " & Drive.model & vbcrlf
str=str & "Количество разделов: " & Drive.Partitions & vbcrlf
Select Case Drive.size/1048576
Case Drive.size/1048576 < 1048576
str=str & "Объём: " & round(Drive.size/1024,2) & " Kb" & vbcrlf
Case Drive.size/1048576 <1000000000
str=str & "Объём: " & round(Drive.size/1048576,2) & " Mb" & vbcrlf
Case Else
str=str & "Объём: " & round(Drive.size/1000000000,0) & " Gb" & vbcrlf '1073741824,2) & " Gb" & vbcrlf
End Select
str=str & vbcrlf
str=str & DELIM_STRING & vbcrlf & vbcrlf
Next
GetHardDrivesData=str
End Function
Function GetFloppyDrivesData()
Dim ColFloppyDrives, FloppyDrive
Dim str
'Получим данные о флопиках
str=str & "ЛОКАЛЬНЫЕ FLOPPY ДИСКИ:" & VBCRLF
SQuery="select * from Win32_FloppyDrive"
Set colfloppydrives=WMI.execquery(SQuery)
For Each FloppyDrive In ColFloppyDrives
str=str & "Имя диска: " & FloppyDrive.name & vbcrlf
str=str & "Производитель: " & FloppyDrive.Manufacturer & vbcrlf
str=str & vbcrlf
str=str & DELIM_STRING & vbcrlf & vbcrlf
next
str=str & DELIM_STRING & vbcrlf & vbcrlf
GetFloppyDrivesData=str
End function
Sub SaveReport(sFileName, bAskShowReport)
dim ask
Set FSO=CreateObject("Scripting.FileSystemObject")
Set TXT=FSO.OpenTextFile (sFileName,for_writing,true)
TXT.Write S
TXT.Close
If baskshowreport Then
ask=msgbox( "Конфигурация данного компьютера сохранена в " & VBcrlf _
& "текстовый файл " & sfilename & vbcrlf & vbcrlf & _
"Открыть данный файл в блокноте?", vbyesNo)
if ask=vbyes then
set shell=createobject("Wscript.Shell")
dim cmdLine
CMDlINE="notepad.exe " & chr(34) & sfilename & Chr(34)
shell.run cmdLine
end If
End if
End sub
В функции получения данных о жёстких дисках получаю вот что:
ЛОКАЛЬНЫЕ ЖЁСТКИЕ ДИСКИ:
Количество дисков: 1
Диск 1
Имя диска: \\.\PHYSICALDRIVE0
Тип диска: Fixed hard disk media
Интерфейс: IDE
Производитель: (Standard disk drives)
Модель: ST340016A
Количество разделов:
Объём: 40 Gb
Подскажите, как получить данные о производителе? А то уже второй день мучаюсь...