Как получить информацию о жестких дисках через VB.net (VS 2010)

Я ищу сценарий VB.net, который может читать конкретную информацию жесткого диска, как:

  • статус
  • плохие сектора
  • температура
  • любые дополнительные параметры приветствуются

Я использую VB.net и Visual Studio 2010.

1 ответ

Поскольку вы также отметили SQL SERVER, я думаю, вы можете выполнить свой код VB для базы данных. Если это так, вы можете запустить это (это даст вам некоторую информацию о размерах, задержке и средней передаче, но прежде чем вы решите передать эти данные, пожалуйста, прочитайте об исходных таблицах sys (так как это может варьироваться в зависимости от вашей версии SQL Server). поскольку некоторые из этих данных могут быть рассчитаны только для SQL Server, и вы также можете найти больше информации, которая вас может заинтересовать):

dm_io_virtual_file_stats

master_files

dm_os_volume_stats

WITH [RAW_INFO] AS
(
    SELECT 
    [num_of_reads] = SUM(num_of_reads),
    [io_stall_read_ms] = SUM(io_stall_read_ms),
    [num_of_writes] = SUM(num_of_writes),
    [io_stall_write_ms] = SUM(io_stall_write_ms),
    [num_of_bytes_read] = SUM(num_of_bytes_read),
    [num_of_bytes_written] = SUM(num_of_bytes_written),
    [io_stall] = SUM(io_stall),
    [Volume Mount Point] = vs.volume_mount_point,
    [File System Format] = vs.file_system_type, 
    [Logical Name] = vs.logical_volume_name,
    [Total Size (GB)] = CONVERT(DECIMAL(18,2),vs.total_bytes/1073741824.0),
    [Free Space (GB)] = CONVERT(DECIMAL(18,2), vs.available_bytes/1073741824.0),
    [Free Space (%)] = CONVERT(DECIMAL(18,2), vs.available_bytes * 1. / vs.total_bytes * 100.0)
    FROM sys.dm_io_virtual_file_stats(NULL, NULL)  vfs
    INNER JOIN sys.master_files  mf WITH (NOLOCK)     ON vfs.database_id = mf.database_id AND vfs.file_id = mf.file_id
    CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.[file_id])  vs 
    GROUP BY LEFT(UPPER(mf.physical_name), 2), vs.volume_mount_point,
    vs.file_system_type, vs.logical_volume_name, vs.total_bytes, vs.available_bytes
    )
SELECT 
[Volume Mount Point],
[Logical Name],
[File System Format],
[Total Size (GB)],
[Free Space (GB)],
[Free Space (%)],
[Read Latency (ms)] = CASE WHEN num_of_reads <> 0 THEN (io_stall_read_ms/num_of_reads) END,
[Write Latency (ms)] = CASE WHEN num_of_writes <> 0 THEN (io_stall_write_ms/num_of_writes) END,
[Overall Latency (ms)] = CASE WHEN num_of_reads <> 0 AND num_of_writes <> 0 THEN (io_stall/(num_of_reads + num_of_writes))  END,
[Avg Read (KB)] = CASE WHEN num_of_reads <> 0 THEN CAST(CAST(num_of_bytes_read as decimal)/ CAST((num_of_reads * 1024) as decimal) as decimal(8,2)) END,
[Avg Write (KB)] = CASE WHEN num_of_writes <> 0 THEN CAST(CAST(num_of_bytes_written as decimal)/ CAST((num_of_writes * 1024) as decimal) as decimal(8,2)) END,
[Avg Transfer (KB)] = CASE  WHEN (num_of_reads <> 0 AND num_of_writes <> 0) THEN CAST(CAST(num_of_bytes_read + num_of_bytes_written as decimal)/ CAST((num_of_reads + num_of_writes * 1024) as decimal) as decimal(8,2)) END
FROM [RAW_INFO]
ORDER BY [Volume Mount Point];

Это статья о том, как выполнить оператор SQL через VB.NET, который возвращает строки.

Другие вопросы по тегам