PowerShell-Skript
Moin Leute,
ich sitze gerade an einem Skript was mir folgendes machen soll:
Aus einem Verzeichnis (Logs) in ein anderes Verzeichnis (Log-Kopie) kopieren, mit dem Windows-Board-Tool zippen, und danach entsprechend löschen, so jetzt bricht der immer ab, ohne irgendwas....
Ich habe den Part mit dem löschen auskommentiert zum testen, und das Skript soweit Kommentiert.
Kann mir jemand helfen den Fehler zu finden, ich steh grad am Schlauch....
Grüße
ich sitze gerade an einem Skript was mir folgendes machen soll:
Aus einem Verzeichnis (Logs) in ein anderes Verzeichnis (Log-Kopie) kopieren, mit dem Windows-Board-Tool zippen, und danach entsprechend löschen, so jetzt bricht der immer ab, ohne irgendwas....
Ich habe den Part mit dem löschen auskommentiert zum testen, und das Skript soweit Kommentiert.
Kann mir jemand helfen den Fehler zu finden, ich steh grad am Schlauch....
# Quellverzeichnis und Zielverzeichnis
$sourcePath = "C:\ProgramData\XXXXXX\Logs"
$destinationPath = "\\XXXXXX\it\XXXXXX_Logs"
# Definition größe und alter (1 GB) (2 months)
$fileSizeThreshold = 1GB
$fileAgeThreshold = (Get-Date).AddMonths(-2)
# alle .txt Dateien im Verzeichnis finden mit den Vorgaben
$logFiles = Get-ChildItem -Path $sourcePath -Filter *.txt | Where-Object {
$_.Length -gt $fileSizeThreshold -and $_.LastWriteTime -lt $fileAgeThreshold
}
foreach ($file in $logFiles) {
# Definition Dateiname nach Zippen
$compressedFileName = "$($file.BaseName).zip"
$compressedFilePath = Join-Path -Path $sourcePath -ChildPath $compressedFileName
# Kompression
try {
Compress-Archive -Path $file.FullName -DestinationPath $compressedFilePath -CompressionLevel Optimal
Write-Output "Successfully compressed: $($file.FullName) to $compressedFilePath"
# Zielpfad
$destinationFile = Join-Path -Path $destinationPath -ChildPath $compressedFileName
# Kopiervorgang
try {
Copy-Item -Path $compressedFilePath -Destination $destinationFile -ErrorAction Stop
# Verifizierung das Datei vorhanden ist
if (Test-Path -Path $destinationFile) {
Write-Output "Successfully copied: $($compressedFilePath) to $destinationFile"
# Löschrutine auskommentiert zu Testzwecke
# Remove-Item -Path $file.FullName -ErrorAction Stop
# Remove-Item -Path $compressedFilePath -ErrorAction Stop
# Write-Output "Successfully copied and deleted: $($file.FullName)"
} else {
Write-Output "File copy failed, not deleting: $($file.FullName)"
}
} catch {
Write-Output "Error copying file: $($compressedFilePath) - $_"
}
} catch {
Write-Output "Compression failed for file: $($file.FullName) - $_"
}
}
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93267370482
Url: https://administrator.de/forum/powershell-skript-93267370482.html
Ausgedruckt am: 22.12.2024 um 08:12 Uhr
11 Kommentare
Neuester Kommentar
@NordicMike
Bricht er ab oder beendet normal? Mach Dir ein paar mehr Diagnose Zeilen rein mit "write-output". Auch am Ende mit "Script ohne Fehlermeldung beendet". Auch dazwischen, am besten lässt du dir die Variablen ausgeben, dann siehst du wo er gerade was macht.
Dafür gibt es die PowerShell ISE, oder VS Code. Da iss doch 'n Debugger drinne. - MennoBricht er ab oder beendet normal? Mach Dir ein paar mehr Diagnose Zeilen rein mit "write-output". Auch am Ende mit "Script ohne Fehlermeldung beendet". Auch dazwischen, am besten lässt du dir die Variablen ausgeben, dann siehst du wo er gerade was macht.
Gruss Penny.
Zitat von @MrHeisenberg:
bsp. ist die Dateigröße mit 1GB zu groß gewählt, da dieser erst ab 1,07GB zählt und die Datei 1,048GB hat, jetzt wird gebastelt :D
bsp. ist die Dateigröße mit 1GB zu groß gewählt, da dieser erst ab 1,07GB zählt und die Datei 1,048GB hat, jetzt wird gebastelt :D
Also genau so, wie ich es geschrieben habe. Du solltest dich dringend besser um deine Variablen kümmern.
In deinem Fall etwa so:
[Array]$logFiles = Get-ChildItem -Path $sourcePath -Filter *.txt | Where-Object {
$_.Length -gt $fileSizeThreshold -and $_.LastWriteTime -lt $fileAgeThreshold
}
if ($logFiles){
foreach ($file in $logFiles) {
...
}
else {
write-output "Nothing to do"
}