Compress-1Clogs.ps1
|
<#
.SYNOPSIS Архивация журналов регистрации информационных баз 1С. .DESCRIPTION Сжимает файлы .lgx и .lgp в поддиректории "1Cv8Log" для каждого каталога srvinfo. По умолчанию: - файлы журналов старше 7 дней архивируются, - архивы старше 90 дней удаляются. Можно задать свои границы через параметры -FileDays и -ArchiveDays. .PARAMETER FileDays Количество дней хранения исходных файлов (логов) до архивации. По умолчанию 7. .PARAMETER ArchiveDays Количество дней хранения архивов перед удалением. По умолчанию 90. .PARAMETER Path Опционально: конкретная папка srvinfo. Если не указана, берутся все пути из Get-1C.SrvinfoPaths. .EXAMPLE Compress-1Clogs # архивирует логи старше 7 дней в каждой папке srvinfo* .EXAMPLE Compress-1Clogs -FileDays 14 -ArchiveDays 60 # пользовательские интервалы. .EXAMPLE Compress-1Clogs -Path "D:\srvinfo17" # только для указанной папки. .NOTES Для работы требуется 7-Zip (7z.exe) в "C:\Program Files\7-Zip\7z.exe". #> function Compress-1Clogs { [CmdletBinding()] param( [Parameter(Mandatory = $false)] [int] $FileDays = 7, [Parameter(Mandatory = $false)] [int] $ArchiveDays = 90, [Parameter(Mandatory = $false)] [string] $Path ) # пути к каталогам srvinfo $srvPaths = if ($Path) { @($Path) } else { (Get-1C).SrvinfoPaths } # настройки $logRetention = $FileDays $archiveRetention = $ArchiveDays $logFile = "C:\ClearCashe1CLog.txt" $sevenZip = "C:\Program Files\7-Zip\7z.exe" $subFolder = "1Cv8Log" $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # проверяем 7z if (-not (Test-Path $sevenZip)) { throw "7z.exe не найден по пути $sevenZip" } # лог-файл if (-not (Test-Path $logFile)) { New-Item -Path $logFile -ItemType File | Out-Null } # чистим лог старше 7 дней if ((Get-Item $logFile).CreationTime -lt (Get-Date).AddDays(-7)) { Remove-Item $logFile -Force } foreach ($srv in $srvPaths) { $regRoot = Join-Path $srv "reg_1541" if (-not (Test-Path $regRoot)) { Write-Verbose "Путь не найден: $regRoot — пропускаем" continue } # 1. Удаляем старые ZIP $zipFiles = Get-ChildItem -Path (Join-Path $regRoot $subFolder) -Recurse -File -Filter *.zip -ErrorAction SilentlyContinue foreach ($zip in $zipFiles) { if ($zip.LastWriteTime -lt (Get-Date).AddDays(-$archiveRetention)) { try { Remove-Item $zip.FullName -Force Add-Content $logFile "$timestamp Удалён архив: $($zip.FullName)" } catch { Add-Content $logFile "$timestamp Ошибка удаления архива $($zip.FullName): $_" } } } # 2. Архивируем логи $logFiles = Get-ChildItem -Path (Join-Path $regRoot $subFolder) -Recurse -File | Where-Object { @('.lgx','.lgp') -contains $_.Extension.ToLower() -and $_.LastWriteTime -lt (Get-Date).AddDays(-$logRetention) } foreach ($file in $logFiles) { $archiveName = "{0}_{1}.zip" -f $file.BaseName, $file.Extension.TrimStart('.') $archivePath = Join-Path $file.DirectoryName $archiveName # удаляем старый архив, если есть if (Test-Path $archivePath) { Remove-Item $archivePath -Force } # собираем аргументы 7z $args = @('a','-tzip',$archivePath,$file.FullName,'-mx=1') $proc = Start-Process -FilePath $sevenZip -ArgumentList $args -NoNewWindow -Wait -PassThru if ($proc.ExitCode -eq 0 -and (Test-Path $archivePath)) { Add-Content $logFile "$timestamp Создан архив: $archivePath из $($file.FullName)" Remove-Item $file.FullName -Force } else { Add-Content $logFile "$timestamp Ошибка архивации $($file.FullName)" } } } Write-Host "Compress-1Clogs завершён. Подробности в логе: $logFile" } |