想要在系统内存使用量超过70%
时清除缓存 我有一个任务计划程序来开始监视,一个性能日志的数据收集,并将报告导出为 csv,一个自定义事件视图来触发清除,以及一个 bat 文件来清除缓存。
这是我拼图的最后一块。
据我所知,cmd和powershell中的所有内容都已被使用
它有一个带有三个字段的标题,然后是 4 个信息单元格。(A2
,B2
,A3
,B3
(
powershell -command {Import-Csv -Path 'C:PerfLogsAdminNew Data Collector SetMemory DataCollector01.csv' | Where{ $_.B3 -gt "70.000000000000000"} | start-process $env:userprofileDesktopcreatvent.bat}
这是电源外壳和记事本中输出的性能报告:
(PDH-CSV 4.0) (Eastern Daylight Time)(240) \LT305-MIAMemory% Committed Bytes In Use Collect memory data usage percentage
------------------------------------------ ------------------------------------------- ------------------------------------
08/19/2019 12:18:32.480 41.363952528071579
08/19/2019 12:19:32.467 41.291049993897566
"(PDH-CSV 4.0) (Eastern Daylight Time)(240)","\LT305-MIAMemory% Committed Bytes In Use","Collect memory data usage percentage"
"08/19/2019 15:38:37.582","47.54470529676059"," "
"08/19/2019 15:39:37.569","47.43784841788883"," "
我想让这段代码正常工作。知道它每次运行(无论值如何(我需要它才能正常运行。
由于您的文件(如您所显示的(只有三列包含实际数据并且使用不太友好的标题,因此我建议您这样做:
- 使用
Get-Content
将文件读取为字符串数组。 - 跳过丑陋的标题行
- 使用自定义标题将其余行转换为 CSV
- 使用
Where-Object
子句在第二列中搜索数字大于 70
的值
if (Get-Content -Path 'C:PerfLogsAdminNew Data Collector SetMemory DataCollector01.csv' |
Select-Object -Skip 1 |
ConvertFrom-Csv -Header 'Date','MemoryUsage','DataUsage' |
Where-Object { [int]$_.MemoryUsage -gt 70 }) {
# in here, run your .bat file to clear the cache
Start-Process "$env:userprofileDesktopcreatvent.bat"
}
抱歉,如果我理解不正确,这是我的示例.csv:
h1;h2;h3;
08/19/2019;12:18:32.460;41.363952528071579
08/19/2019;12:19:32.467;41.291049993897566
08/19/2019;12:18:31.480;78.363952528073254
并执行此代码:
Import-Csv .file.csv -Delimiter ";" | Where-Object -Property h3 -gt 77
控制台中显示的结果:
h1 h2 h3
-- -- --
08/19/2019 12:18:31.480 78.363952528073254
你能尝试一下并让结果知道吗?