运行powershell脚本从3TB数据的大小中获取旧文件名需要多长时间?

时间:2017-06-16 09:19:57

标签: powershell

我开发了一个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

我想知道完成这个过程需要多长时间?

请指导我..

1 个答案:

答案 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。但就像我说的那样:在不知道需要处理多少项目的情况下,无法估计流程所需的时间