Skript zum Erstellen eines Archivs mit Powershell und 7zip

Wir haben mehrere Server, die täglich Protokolldateien nach C: \ Logs schreiben. Jeden Monat soll ein Skript ausgeführt werden, um Dateien zu identifizieren, die älter als 30 Tage sind, sie zu archivieren und die Quelldatei zu löschen. Der Ordner C: \ Logs enthält Protokolldateien und Unterordner (1234, 4567, 7890), die auch Protokolldateien enthalten. Als Powershell-Neuling habe ich das folgende Skript in der Hoffnung zusammengestellt, dass ich diese Aufgabe automatisieren kann.

Das Skript kann Dateien identifizieren, die älter als 30 Tage sind (ich habe die Dateinamen beim Testen ausgeben lassen), aber wenn die Archivierungsroutine gestartet wird, wird alles im Ordner C: \ Logs komprimiert und der Ordner wird nicht beibehalten Unterordnerstruktur.

Das Skript ist wahrscheinlich nicht so gut wie möglich geschrieben. Wenn Sie also Vorschläge haben, wie ich es verbessern und es dazu bringen kann, das zu tun, was es braucht, würde ich mich über Vorschläge freuen.

$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" 

Antworten auf die Frage(3)

Ihre Antwort auf die Frage