Compress-1Clogs.ps1
|
<#
.SYNOPSIS .DESCRIPTION Архивация журналов регистрации информационных баз 1С Использование - стандартно, без указания параметров, время хранения: - файлов журналов регистрации: 7 дней - архивов файлов журналов регистрации: 90 дней Для задания своего временного диапазона, при запуске функции достаточно указать эти два параметра. Пример: - Compress-1Clogs -fileDays 14 -archiveDays 60 Первый параметр - количество дней хранения файлов, второй параметр для архивов. Степень сжатия минимальная. .PARAMETER Path The path that will be searched for a registry key. .EXAMPLE Compress-1Clogs -fileDays 14 -archiveDays 60 .INPUTS System.String .OUTPUTS Microsoft.Win32.RegistryKey .NOTES This module is an example of what a well documented function could look. .LINK #> function Compress-1Clogs ($fileDays = 7, $archiveDays = 90) { $logRetentionDays = $fileDays $archiveRetentionDays = $archiveDays #Получим путь к директории srvinfo, используя йункцию 1CMSrvinfo [string]$getRootDirectory = (Get-1C).SrvinfoPaths $rootDirectory = $getRootDirectory + "\reg_1541" $logFile = "C:\ClearCashe1CLog.txt" $sevenZipPath = "C:\Program Files\7-Zip\7z.exe" $targetDirectoryName = "1Cv8Log" $data = Get-Date # Проверка наличия 7z.exe if (-Not (Test-Path $sevenZipPath)) { Write-Host "7z.exe не найден по пути $sevenZipPath. Скрипт завершен." exit } # очистка лога выполнения функции, старше 7 дней if ((Get-ChildItem $logFile).CreationTime -lt (Get-Date).AddDays(-7)) { Remove-Item $logFile -Force } Get-ChildItem -Path $rootDirectory -Directory | Where-Object { $_.Name -match "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" } | ForEach-Object { $uuidDirectory = $_.FullName $targetDirectory = Join-Path $uuidDirectory $targetDirectoryName if (Test-Path $targetDirectory) { # Удаление архивов старше $archiveRetentionDays дней Get-ChildItem -Path $targetDirectory -Recurse -File | Where-Object { ($_.Extension -eq ".zip") -and ($_.LastWriteTime -lt (Get-Date).AddDays(-$archiveRetentionDays)) } | ForEach-Object { try { Write-Host "Удаление старого архива: $($_.FullName)" Remove-Item $_.FullName -Force Add-Content -Path $logFile -Value "$data Удалён старый архив: $($_.FullName)" } catch { $errorMessage = $_.Exception.Message Write-Host "Ошибка удаления архива: $errorMessage" Add-Content -Path $logFile -Value "$data Ошибка удаления архива: $errorMessage" } } # Обработка файлов .lgx и .lgp Get-ChildItem -Path $targetDirectory -Recurse -File | Where-Object { ( ($_.Extension -eq ".lgx") -or ($_.Extension -eq ".lgp") ) -and ($_.LastWriteTime -lt (Get-Date).AddDays(-$logRetentionDays)) } | ForEach-Object { try { # Формируем имя архива: имяФайла_расширение.zip (расширение без точки) $archiveName = "$($_.BaseName)_$($_.Extension.TrimStart('.')).zip" $zipPath = Join-Path $_.DirectoryName $archiveName # Если архив уже существует, удаляем его if (Test-Path $zipPath) { Remove-Item $zipPath -Force } # Формируем пути в кавычках для 7-Zip $zipPathQuoted = '"' + $zipPath + '"' $sourceFileQuoted = '"' + $_.FullName + '"' $arguments = @("a", "-tzip", $zipPathQuoted, $sourceFileQuoted, "-mx=1") Write-Host "Архивирование файла с помощью 7zip: $($_.FullName) в $zipPath" Start-Process -FilePath $sevenZipPath -ArgumentList $arguments -NoNewWindow -Wait -PassThru Start-Sleep -Seconds 2 # Ждем, чтобы убедиться, что архив создан if ((Test-Path $zipPath) -and ((Get-Item $zipPath).Length -gt 0)) { Write-Host "Архивирован файл: $($_.FullName) в $zipPath" Add-Content -Path $logFile -Value "$data Создан архив: $zipPath файла: $($_.FullName)" Write-Host "Удаление исходного файла: $($_.FullName)" Remove-Item $_.FullName -Force } else { Add-Content -Path $logFile -Value "$data Ошибка архивации файла: $($_.FullName)" } } catch { $errorMessage = $_.Exception.Message Write-Host "Ошибка: $errorMessage" Add-Content -Path $logFile -Value "$data Ошибка: $errorMessage" } } } } } |