我目前使用的脚本监视某些关键文件夹中的文件数量,以便运营团队密切关注并根据数字做出决策。该脚本运行良好,如下所示:
$folders = @("c:\temp", "C:\temp\tosh")
$results = @()
foreach ($folder in $folders) {
$folderFiles = Get-ChildItem -Path $folder -File | Where-Object { $_.Name -like "abc*.xml" }
$obj = New-Object psobject -Property @{
Folder = $folder
Count = $folderFiles.count
}
$results += $obj
}
$results | format-table
但是,当其中一个文件夹中的xml
个文件数量很大(20k +左右)而GCI需要60s +才能返回结果时,我会遇到问题。
我想知道,如果$folderFiles
对象达到设定数量(例如5000的数量),我有没有办法停止GCI?这使我能够在$results
表中显示5000+作为文件计数。
我已经考虑过使用Select-Object
,但是假设这会执行整个GCI,那么只有在完成后才会限制?
$folderFiles = Get-ChildItem -path $folder -File | Select-Object -First 5000
任何建议表示赞赏。
答案 0 :(得分:2)
您可以使用较小的样本进行测试,以查看结果。 Measure-Command
是查看代码部分执行情况的有用工具:
这是我对大约500个文件的文件夹进行的测试:
Measure-Command { Get-ChildItem -File }
Measure-Command { Get-ChildItem -File | Select-Object -First 250 }
结果:
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 26
Ticks : 263370
TotalDays : 3.04826388888889E-07
TotalHours : 7.31583333333333E-06
TotalMinutes : 0.00043895
TotalSeconds : 0.026337
TotalMilliseconds : 26.337
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 13
Ticks : 132462
TotalDays : 1.533125E-07
TotalHours : 3.6795E-06
TotalMinutes : 0.00022077
TotalSeconds : 0.0132462
TotalMilliseconds : 13.2462
您可以看到使用Select
确实提高了代码的性能。