我开发了一个powershell脚本来查找旧文件。哪个运行完美,可以从大约120,000个文件的900GB大小的数据中获取文件名。但是同样的脚本已经运行了36小时,大小为3TB数据,大约是1.250,000个文件。
我已经提到过以下脚本:
$fullPath = Read-Host "Please Enter File Location:"
$numdays = Read-Host "Please Enter No of days before files:"
function ShowOldFiles($path, $days)
{
$files = @(get-childitem $path -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days)) -and ($_.psIsContainer -eq $false)})
if ($files -ne $NULL)
{
for ($idx = 0; $idx -lt $files.Length; $idx++)
{
$file = $files[$idx]
Write-host $file.FullName
}
}
}
ShowOldFiles $fullPath $numdays
pause
我想知道完成这个过程需要多长时间?
请指导我..
答案 0 :(得分:1)
一些改编:
功能中的拳头线:
您为每个文件执行(Get-Date).AddDays(-$days)
。因此,在1.25 M文件中,运行它1.25 M次。但你只需要一次。仅在我的表面上需要83秒。
我没有在你创建的for循环中看到这一点。如果您想要返回文件,请在过滤后再进行操作。您可以通过运行$output = ShowOldFiles...
之类的函数来选择输出。但是,如果功能仍然在运行,你就没有指示器。
$fullPath = Read-Host "Please Enter File Location:"
$numdays = Read-Host "Please Enter No of days before files:"
function ShowOldFiles($path, $days)
{
$refDate = (Get-Date).AddDays(-$days)
get-childitem $path -include *.* -recurse |
Where-Object {($_.LastWriteTime -lt $refDate) -and ($_.psIsContainer -eq $false)} |
Select-Object -ExpandProperty Fullname
}
ShowOldFiles $fullPath $numdays
pause
如果您想知道完成此任务需要多长时间,您需要知道需要处理多少项目。当我们谈论大数字时,我不会建议仅查询所有数据的尝试,以便对运行该函数的时间进行编程估计。根据我向您展示的语法,您应该看到它们正在使用的语句 - 因此您有一个代码仍在运行的idicator。但就像我说的那样:在不知道需要处理多少项目的情况下,无法估计流程所需的时间