У меня есть сценарий Powershell, в котором мне нужно определить, были ли какие-либо файлы добавлены в папку за последние 60 минут. Если ответ да, то я беру эти файлы, копирую их в другой каталог и выполняю определенный код. Прямо сейчас в исходном каталоге ~ 10-20 тыс. файлов, и выполнение кода занимает много времени. Я попробовал метод оптимизации для gci, который нашел в Интернете (включая выходные данные конвейера), но ни один из них не сработал. Я также пытался выполнить пакетный файл с помощью c/dir, но получаю сообщение об ошибке, говорящее, что он не поддерживает пути UNC. Любые идеи?
Stop-Process -name excel
$PathMX1005 = "\\UNCsourcedir"
$numberoffilesMX1005 = Get-ChildItem $PathMX1005 -recurse -include *1Hz_1*.csv | Where { $_.CreationTime -ge [datetime]::Now.AddMinutes(-60) } | Measure-Object
If ($numberoffilesMX1005.Count -eq 0) {Exit-PSSession}
Else {
$filesMX1005 = Get-ChildItem $PathMX1005 -recurse -include *1Hz_1*.csv | Where { $_.CreationTime -ge [datetime]::Now.AddMinutes(-60) } ....
rest of code }
[DateTime]::Now
содержит миллисекунды; Мне было интересно, будет ли предложениеwhere
пересчитыватьNow.AddMinutes(-60)
для каждого файла, и будет ли предварительный расчет быстрее. Таким образом я просканировал ~22k файлов через UNC. Это заняло 26,540 мс. Затем я снова запустил его с исходным расчетом внутри подхода с предложением where: 16,26 мс. Затем, чтобы попытаться учесть дисковые кеши, я повторил первую попытку с предварительным вычислением и получил 16,215 мс. Затем попытался распечатать расчет внутри предложения where. Я думаю, что он пересчитывается каждый раз, но общая разница незначительна для файлов размером 22 КБ в локальной сети. - person TessellatingHeckler   schedule 02.06.2015