Высокое использование оперативной памяти во время Powershell Script для удаления старых файлов - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно удалить несколько файлов внутри другого пути, поэтому я создал сценарий PowerShell, который считывает путь, записанный внутри "logpaths.txt", и проверяет все папки внутри, а затем проверяет более чем 10dd файлы и папку и пустую папку.

Это работает, но если я запускаю сценарий в течение нескольких часов, объем ОЗУ увеличивается, и я должен остановить процесс ... Может кто-нибудь помочь мне, как это исправить?

# Delete all Files in $LogPaths older than 10 day(s)
$Days = 10                  # Number of days from which files are deleted
$DateBeforeXDays = (Get-Date).AddDays(-$Days)
$log = "D:\Logs\ClearLogs\Logs\$(Get-Date -Format yymmddHHmmss).txt"

function CheckDirectories {
    Start-Transcript $log
    $LogPaths = gc -Path D:\Logs\ClearLogs\logpaths.txt
    Write-Host $LogPaths -BackgroundColor DarkGreen 
    foreach ($p in $LogPaths) {
        $mainFolder = gci $p -Directory -Exclude ALL,Clearlogs
        Write-Host $p -BackgroundColor Green -ForegroundColor Black
        $subFolder = gci $mainFolder.FullName -Directory -Exclude ALL
        foreach ($subFolder in $mainFolder) {
            Write-Host $subFolder -ForegroundColor Green 
            $folder = gci $subFolder.FullName -Directory -Exclude ALL
            Write-Host $folder -ForegroundColor white
            if ($folder -ne $null) {
                CheckFolders
                CheckOldFiles
                CheckEmptyFolders
            }
        }
        Stop-Transcript
    }
}

function CheckFolders {
    $Folders = gci -Path $folder.FullName -Recurse -Force -Directory | Where-Object {
        !$_.PSIsContainer -and
        $_.LastWriteTime -lt $DateBeforeXDays
    }
    $cnt   = $Folders.Count
    $Folders | Remove-Item -Force -Verbose  -Recurse
    Write-Host "DELETED N. $cnt" -BackgroundColor blue
}

function CheckOldFiles {
    $Files = gci -Path $folder.FullName -Recurse -Force -File | Where-Object {
        !$_.PSIsContainer -and
        $_.LastWriteTime -lt $DateBeforeXDays
    }
    $cnt   = $Files.Count
    $Files | Remove-Item -Force -Verbose
    Write-Host "DELETED N. $cnt Files" -BackgroundColor DarkGray
}

function CheckEmptyFolders {
    $EmptyFolders = gci -Path $folder.FullName -Recurse -Force -Directory | Where-Object {
        $_.PSIsContainer -and
        (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object {!$_.PSIsContainer}) -eq $null
    }
    $cnt   = $EmptyFolders.Count
    if ($EmptyFolders -ne $NULL) {        
        $EmptyFolders | Remove-Item -Force -Verbose -Recurse
    }
    Write-Host "DELETED N. $cnt EmptyFolders" -BackgroundColor DarkGreen
}

CheckDirectories
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...