Мне нужно удалить несколько файлов внутри другого пути, поэтому я создал сценарий 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