我可以通过编程获取物理驱动器的“活动时间百分比”吗?

我可以通过编程获取物理驱动器的“活动时间百分比”吗?

如何以编程方式获取驱动器的“最高活动时间”?

我可以在资源监视器上看到它,但我想使用脚本(VBScript、Batch)或应用程序以编程方式获取它,这样我就可以将服务器的状态上传到数据库,而无需手动检查每个服务器。

此外,没有管理员权限也能获得此状态吗?

谢谢

答案1

您在资源监视器中看到的“最高活动百分比”只是资源监视器在收集统计数据期间看到的最高活动时间,系统不会为您保留这些信息。您可以做的是定期自行收集相关统计数据,并使用它来计算结果。

您可以使用 WMI 获取磁盘使用情况统计信息;获取此时点所有磁盘的当前 PercentDiskTime 统计信息的示例 PowerShell 脚本如下:

$wmi = Get-WMIObject -Class "Win32_PerfFormattedData_PerfDisk_PhysicalDisk" -Filter 'Name = "_Total"'
$wmi.PercentDiskTime

您可以根据表达式进行过滤以获取所需的统计数据,或者更改参数-Filter 'Name = "_Total"'以更改为您感兴趣的磁盘,或者如果您想要所有内容的统计数据,甚至可以将其完全删除。

您可以使用它来计算脚本迄今为止看到的最高值。

答案2

这是我拼凑起来的。希望对您有帮助。

do {
$MHEdate1 = (Get-Date).tostring("yyyyMMddHHmmss") # example output 20161122. 
$MHEday = (Get-Date).tostring("yyyyMMdd") # example output 20161122. 
$OutputDir = "C:\Tools\Logs"
$logoname = "DISK-read-time-percent-$MHEday"
$OutputFile1 = Join-Path $OutputDir "$logoname.txt"
$disktocheck = 'F:'
$percentActiveTS = (Get-Date)
$percentActive = Get-Counter "\LogicalDisk($disktocheck)\% Disk Read Time" | Foreach-Object {$_.CounterSamples[0].CookedValue} 
"$disktocheck, $percentActive, $percentActiveTS " | out-file $OutputFile1 -Append
  start-sleep -Seconds 30

}until($infinity)

相关内容