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
Please also mark the comments that contributed to the solution of the article
Content-Key: 93267370482
Url: https://administrator.de/contentid/93267370482
Printed on: June 1, 2024 at 11:06 o'clock
11 Comments
Latest comment
@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"
}