如何以编程方式获取驱动器的“最高活动时间”?
我可以在资源监视器上看到它,但我想使用脚本(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)