Скрипт для создания архива с использованием powershell и 7zip

У нас есть несколько серверов, которые ежедневно записывают файлы журналов в C: \ Logs. Предполагается, что каждый месяц запускается скрипт для идентификации файлов старше 30 дней, их архивирования и удаления исходного файла. Папка C: \ Logs содержит файлы журналов и вложенные папки (с именами 1234, 4567, 7890), которые также содержат файлы журналов. Будучи новичком в Powershell, я собрал приведенный ниже сценарий в надежде, что смогу автоматизировать эту задачу.

Сценарий может идентифицировать файлы старше 30 дней (у меня он выводил имена файлов, когда тестировал его), но когда запускается процедура архивирования, он архивирует все в папке C: \ Logs и не сохраняет структура подпапок.

Сценарий, вероятно, написан не лучшим образом, поэтому, если у вас есть какие-либо предложения о том, как я могу улучшить его и заставить его делать то, что ему нужно, я хотел бы услышать любые предложения.

$Hname = hostname #Name of server
$Source = "C:\logs" #Folder where log files reside
$Archive = "C:\logs\$hname\Archive.zip" #Folder where archive file will be created
$Extension = "*.txt" #Only files with this extension will be identified and archived
$Date = Get-Date #Today's date
$Days = "30" #Number of days past today's date that will be archived
$Files  =  get-childitem $Source  -include $Extension -recurse | Where-Object {$_.LastWriteTime -lt $Date.AddDays(-$Days)}                                                         
$FileNames = ""

foreach ($File in $Files)
{
    write-host "File Name : $File " $File.LastWriteTime 
    $FileNames = $FileNames + " " + $File  
}
write-host "Files to archive : " $FileNames

if($FileNames.Trim() -ne "")
{
    [string]$Zip = "C:\apps\7-zip\7z.exe"; #path to 7Zip executable
    [array]$arguments = "a", "-tzip", "-y", $Archive, $Source+$Extension;
    & $Zip $arguments ;
}

foreach ($File in $Files)
{
    write-host "Deleting file :"$File
    #remove-item $File -exclude *.zip
}
else
{
    write-host "No files to archive"
}

write-host "Archive Completed" 

Ответы на вопрос(3)

Ваш ответ на вопрос