Как получить информацию о жестких дисках через VB.net (VS 2010)
Я ищу сценарий VB.net, который может читать конкретную информацию жесткого диска, как:
- статус
- плохие сектора
- температура
- любые дополнительные параметры приветствуются
Я использую VB.net и Visual Studio 2010.
1 ответ
Поскольку вы также отметили SQL SERVER, я думаю, вы можете выполнить свой код VB для базы данных. Если это так, вы можете запустить это (это даст вам некоторую информацию о размерах, задержке и средней передаче, но прежде чем вы решите передать эти данные, пожалуйста, прочитайте об исходных таблицах sys (так как это может варьироваться в зависимости от вашей версии SQL Server). поскольку некоторые из этих данных могут быть рассчитаны только для SQL Server, и вы также можете найти больше информации, которая вас может заинтересовать):
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, который возвращает строки.