需要搜索一个 csv 文件和 运行 一个关于值的 if/Where 语句来初始化一个 bat 文件
Need to Search an csv file and run an if/Where statement on the value to initialize a bat file
想要在系统内存使用量超过 70%
时清除我的缓存
我有一个任务调度程序来开始监视,一个用于性能日志的数据 collection 以及导出到 csv 的报告,一个用于触发清除的自定义事件视图,以及一个用于清除缓存的 bat 文件。
这是我拼图的最后一块。
cmd 和 power 中的所有内容shell 据我所知
它有一个包含三个字段的 header,然后是 4 个信息单元格。 (A2
, B2
, A3
, B3
)
powershell -command {Import-Csv -Path 'C:\PerfLogs\Admin\New Data Collector Set\Memory DataCollector01.csv' | Where{ $_.B3 -gt "70.000000000000000"} | start-process $env:userprofile\Desktop\creatvent.bat}\
这是 power shell 和记事本中的性能报告输出:
(PDH-CSV 4.0) (Eastern Daylight Time)(240) \LT305-MIA\Memory\% 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-MIA\Memory\% 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"," "
我想让这段代码正常工作。正确知道它 运行s 每次(无论值)我需要它正确地 运行。
抱歉,如果我没有理解正确,这是我的示例 .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
你能试试看结果吗?
由于您的文件(如您所示)只有三列包含实际数据并且使用的 header 不是很友好,我建议您这样做:
- 使用
Get-Content
. 将文件读取为字符串数组
- 跳过难看的 header 行
- 使用自定义 headers
将其余行转换为 CSV
- 使用
Where-Object
子句在第二列中搜索数值大于 70 的值
if (Get-Content -Path 'C:\PerfLogs\Admin\New Data Collector Set\Memory 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:userprofile\Desktop\creatvent.bat"
}
想要在系统内存使用量超过 70%
时清除我的缓存
我有一个任务调度程序来开始监视,一个用于性能日志的数据 collection 以及导出到 csv 的报告,一个用于触发清除的自定义事件视图,以及一个用于清除缓存的 bat 文件。
这是我拼图的最后一块。
cmd 和 power 中的所有内容shell 据我所知
它有一个包含三个字段的 header,然后是 4 个信息单元格。 (A2
, B2
, A3
, B3
)
powershell -command {Import-Csv -Path 'C:\PerfLogs\Admin\New Data Collector Set\Memory DataCollector01.csv' | Where{ $_.B3 -gt "70.000000000000000"} | start-process $env:userprofile\Desktop\creatvent.bat}\
这是 power shell 和记事本中的性能报告输出:
(PDH-CSV 4.0) (Eastern Daylight Time)(240) \LT305-MIA\Memory\% 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-MIA\Memory\% 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"," "
我想让这段代码正常工作。正确知道它 运行s 每次(无论值)我需要它正确地 运行。
抱歉,如果我没有理解正确,这是我的示例 .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
你能试试看结果吗?
由于您的文件(如您所示)只有三列包含实际数据并且使用的 header 不是很友好,我建议您这样做:
- 使用
Get-Content
. 将文件读取为字符串数组
- 跳过难看的 header 行
- 使用自定义 headers 将其余行转换为 CSV
- 使用
Where-Object
子句在第二列中搜索数值大于 70 的值
if (Get-Content -Path 'C:\PerfLogs\Admin\New Data Collector Set\Memory 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:userprofile\Desktop\creatvent.bat"
}