Compress-1Clogs.ps1
|
<#
.SYNOPSIS Архивация журналов регистрации информационных баз 1С. .DESCRIPTION Для каждого пути srvinfo* из Get-1C.SrvinfoPaths (или одного, указанного через -Path): 1) Находит подкаталоги reg_* 2) В каждом reg_* находит подкаталоги по GUID (UUID) 3) В каждом UUID-подкаталоге идет в папку 1Cv8Log 4) Удаляет ZIP-архивы старше ArchiveDays 5) Архивирует файлы .lgx и .lgp старше FileDays 6) Логирует все действия в C:\ClearCashe1CLog.txt .PARAMETER FileDays Дней хранения исходных файлов логов перед архивацией (по умолчанию 7). .PARAMETER ArchiveDays Дней хранения ZIP-архивов перед удалением (по умолчанию 90). .PARAMETER Path (опционально) Конкретный путь srvinfo. Если не указан — берутся все из (Get-1C).SrvinfoPaths. .EXAMPLE # По всем srvinfo* Compress-1Clogs .EXAMPLE # Только для D:\srvinfo17 Compress-1Clogs -Path 'D:\srvinfo17' #> function Compress-1Clogs { [CmdletBinding()] param( [int] $FileDays = 7, [int] $ArchiveDays = 90, [string] $Path ) # Лог и 7-Zip $LogFile = 'C:\ClearCashe1CLog.txt' $SevenZip = 'C:\Program Files\7-Zip\7z.exe' $NowStamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' # Проверки if (-not (Test-Path $SevenZip)) { throw "7-Zip не найден по пути: $SevenZip" } if (-not (Test-Path $LogFile)) { New-Item $LogFile -ItemType File | Out-Null } if ((Get-Item $LogFile).CreationTime -lt (Get-Date).AddDays(-7)) { Remove-Item $LogFile -Force } # Собираем корни srvinfo $roots = if ($Path) { @($Path) } else { (Get-1C).SrvinfoPaths } foreach ($root in $roots) { # 1) Ищем reg_* папки $regDirs = Get-ChildItem -Path $root -Directory -Filter 'reg_*' -ErrorAction SilentlyContinue foreach ($reg in $regDirs) { # 2) Внутри reg_* ищем UUID-папки $uuidDirs = Get-ChildItem -Path $reg.FullName -Directory | Where-Object { $_.Name -match '^[0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' } foreach ($uuid in $uuidDirs) { # 3) Переходим в 1Cv8Log $logDir = Join-Path $uuid.FullName '1Cv8Log' if (-not (Test-Path $logDir)) { Write-Verbose "Не найдена папка логов: $logDir" continue } # 4) Удаляем старые ZIP Get-ChildItem -Path $logDir -Recurse -File -Filter '*.zip' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$ArchiveDays) } | ForEach-Object { try { Remove-Item $_.FullName -Force Add-Content $LogFile "$NowStamp Удалён архив: $($_.FullName)" } catch { Add-Content $LogFile "$NowStamp Ошибка удаления архива $($_.FullName): $_" } } # 5) Архивируем .lgx и .lgp Get-ChildItem -Path $logDir -Recurse -File | Where-Object { @('.lgx','.lgp') -contains $_.Extension.ToLower() -and $_.LastWriteTime -lt (Get-Date).AddDays(-$FileDays) } | ForEach-Object { $zipName = "{0}_{1}.zip" -f $_.BaseName, ($_.Extension.TrimStart('.')) $zipPath = Join-Path $_.DirectoryName $zipName if (Test-Path $zipPath) { Remove-Item $zipPath -Force } $args = @('a','-tzip',$zipPath,$_.FullName,'-mx=1') $proc = Start-Process -FilePath $SevenZip -ArgumentList $args -NoNewWindow -Wait -PassThru if ($proc.ExitCode -eq 0 -and (Test-Path $zipPath)) { Add-Content $LogFile "$NowStamp Создан архив: $zipPath из $($_.FullName)" Remove-Item $_.FullName -Force } else { Add-Content $LogFile "$NowStamp Ошибка архивации: $($_.FullName)" } } } } } Write-Host "Compress-1Clogs завершён. Подробности в логе: $LogFile" } |