Не могу получить имя производителя диска

Программирование на Active Server Pages и VBScript.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Не могу получить имя производителя диска

Сообщение Ruslan Demidow » 05.07.2005 (Вт) 22:00

Занялся тут основательно WMI. Вроде бы всё понятно. Много рульного.
Но вот одна заковыка. Сейчас пишу для работы скрипт, который выводит конфигурацию (основные элементы) компьютера, но вот не могу получить имя производителя диска. Постоянно пишет фигню про стандартный диск.
Вот скрипт.
Код: Выделить всё

'==========================================================================
'
' 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


Подскажите, как получить данные о производителе? А то уже второй день мучаюсь... :cry:
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ant-kul
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 15.12.2012 (Сб) 17:35

Re: Не могу получить имя производителя диска

Сообщение Ant-kul » 13.01.2014 (Пн) 19:44

Вот так я это решил. Привожу метод, который соотносит имя диска и его букву. Может кому надо. Kindle Internal Storage USB Device - Имя диска
(C# .Net 4.0)
Для роботы этого метода я создал клаc Disk. Его код также привожу.

using System;
using System.Collections.Generic;
using System.Management;

static SomeClass
{
static string GetKindleRoot(string kindleName = "Kindle Internal Storage USB Device")
{
ManagementObjectSearcher searcherDiskDriveModel = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
ManagementObjectSearcher searcherDriveToPartition = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDriveToDiskPartition");
ManagementObjectSearcher searcherLogicalToPartition = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");

List<Disk> disksDriveToPartition = new List<Disk>();
List<Disk> disksDiskDriveModel = new List<Disk>();
List<Disk> disksLogicalToPartition = new List<Disk>();

foreach (ManagementObject queryDriveToPartition in searcherDriveToPartition.Get())
disksDriveToPartition.Add(new Disk(queryDriveToPartition["Antecedent"].ToString(), queryDriveToPartition["Dependent"].ToString(), "", ""));

foreach (ManagementObject queryLogicalToPartition in searcherLogicalToPartition.Get())
disksLogicalToPartition.Add(new Disk("", queryLogicalToPartition["Antecedent"].ToString(), queryLogicalToPartition["Dependent"].ToString(), ""));

foreach (ManagementObject queryDiskDriveModel in searcherDiskDriveModel.Get())
disksDiskDriveModel.Add(new Disk(queryDiskDriveModel["Name"].ToString(), "", "", queryDiskDriveModel["Model"].ToString()));

var LogicalDisks = from Disk l in disksLogicalToPartition
join p in disksDriveToPartition on l.Partition equals p.Partition
select new Disk(p.DiskDrive, l.Partition, l.LogicalDisk, l.Model);
var KindleDiskMod = from Disk m in disksDiskDriveModel
where m.Model == kindleName
select m;
if (KindleDiskMod.Count() == 0) return "";
string kindleDiskDrive = KindleDiskMod.First().DiskDrive;
var KindleDisk = from Disk d in LogicalDisks
where d.DiskDrive == kindleDiskDrive
select new Disk(d.DiskDrive, d.Partition, d.LogicalDisk, kindleName);

return KindleDisk.Count() == 0 ? "" : KindleDisk.First().LogicalDisk;
}
}

class Disk
{
private string diskDrive_;
private string partition_;
private string logicalDisk_;
private string model_;

public string DiskDrive
{
get { return diskDrive_; }
set
{
if (String.IsNullOrEmpty(value))
diskDrive_ = "";
else
{
if (value.Split('=').Length == 2)
diskDrive_ = value.Split('=')[1].Replace("\"", "").Replace("\\", "");
else
diskDrive_ = value.Replace("\"", "").Replace("\\", "");
}
}
}
public string Partition
{
get { return partition_; }
set
{
if (String.IsNullOrEmpty(value))
partition_ = "";
else
{
if (value.Split('=').Length == 2)
partition_ = value.Split('=')[1].Replace("\"", "");
else
partition_ = value.Replace("\"", "");
}
}
}
public string LogicalDisk
{
get { return logicalDisk_; }
set
{
if (String.IsNullOrEmpty(value))
logicalDisk_ = "";
else
{
if (value.Split('=').Length == 2)
logicalDisk_ = value.Split('=')[1].Replace("\"", "");
else
logicalDisk_ = value.Replace("\"", "");
}
}
}
public string Model
{
get { return model_; }
set
{
if (String.IsNullOrEmpty(value))
model_ = "";
else
model_ = value;
}
}

public Disk(string diskDrive, string partition, string logicalDisk, string model)
{
DiskDrive = diskDrive;
Partition = partition;
LogicalDisk = logicalDisk;
Model = model;
}
}

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Не могу получить имя производителя диска

Сообщение alibek » 14.01.2014 (Вт) 12:03

Во-первых, это ASP, а не ASP.NET (хотя в случае с WMI это не принципиально).
Во-вторых, мне кажется что за почти девять лет автор топика либо решил вопрос, либо он стал неактуален.
В-третьих, на форуме есть тэги, используй их для форматирования текста сообщения.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList