marcimarc85
Goto Top

Powershell letzte Backupdatei des Monats verschieben

Hallo,

Ich möchter gern ein Backup, was täglich auf einer NAS geschpeichert wird, verschieben. Dazu soll immer das Backup vom letzten Tag im Monat in einen Ordner "Monatssicherung" verschoben werden. Das Script funktioniert so halbwegs, da es zwar das letzte Backup, des Monats verschiebt, diese aber meist vom vorletzten Tag des Monats ist. Das backup läuft immer täglich um 23:00 Uhr. Bis es aber ferti ist, ist es schon nach 24:00 Uhr und somit ist das Datum der letzten Änderung schon am neuen Tag und somit im neuen Monat. Was kann/ müsste ich am folgenden Script ändern, damit das so klappt, wie ich das gern hätte?

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("x:", "\\192.168.50.70\mysqlback", $false, "\\domain\username", "password")  
$files = gci 'x:\full_backups' -Filter *.zip | ?{$_.LastWriteTime.toString('yyyyMM') -eq (get-date).AddMonths(-1).toString('yyyyMM')} | sort LastWriteTime -Desc   
$files | select -First 1 | move-item -Destination 'x:\Monatssicherung' -Force   

Content-Key: 395699

Url: https://administrator.de/contentid/395699

Printed on: April 25, 2024 at 17:04 o'clock

Member: erikro
erikro Dec 14, 2018 at 08:52:24 (UTC)
Goto Top
Moin,

versuch mal statt .LastWriteTime .CreationTime.

hth

Erik
Member: MarciMarc85
MarciMarc85 Dec 14, 2018 at 09:17:44 (UTC)
Goto Top
Das funktioniert leider nicht. Hatte ich auch schon dran gedacht. es handelt sich um ein MySQL enterprise Backup, welches am Ende des Backups mit 7ZIP gezipped wird. Der IP-Vorgang startet erst nach Mitternacht, somit ist die ZIP-Datei mit der Creation.Time schon am nächsten Morgen bzw. nächsten Monat.
Wie müsste ich denn alternativ das Powershell umschreiben, dass nur die erste Datei vom aktuelln Monat verschoben wird. Wäre ja auch eine Möglichkeit
Mitglied: 137846
137846 Dec 14, 2018, updated at Dec 17, 2018 at 08:46:42 (UTC)
Goto Top
Mit Karenz
$files = gci 'x:\full_backups' -Filter *.zip | ?{$_.LastWriteTime -ge (get-date -Day 1).Date.AddMonths(-1) -and $_LastwriteTime -lt (get-date -Day 1).Date.AddHours(6)} | sort LastWriteTime -Desc | Select -First 1  
Oder erstes des Monats
$files = gci 'x:\full_backups' -Filter *.zip | ?{$_.LastWriteTime.toString('yyyyMM') -eq (get-date).toString('yyyyMM')} | sort LastWriteTime | select -First 1  
Member: MarciMarc85
MarciMarc85 Dec 17, 2018 at 08:43:16 (UTC)
Goto Top
Vielen Dank für Deine Hilfe.

Die erste Variante, mit 6 Std. karenz, gefällt mir am Besten. Allersdings wird dort das Backup vom letzten Tag, (also gestern) kopiert und nicht das letzte vom vergangenen Monat.

Die zweite Variante 8erste des Monats) hingegen, funktioniert
Mitglied: 137846
137846 Dec 17, 2018 updated at 08:57:01 (UTC)
Goto Top
Zitat von @MarciMarc85:
Die erste Variante, mit 6 Std. karenz, gefällt mir am Besten. Allersdings wird dort das Backup vom letzten Tag, (also gestern) kopiert und nicht das letzte vom vergangenen Monat.
Naja, du hättest nur ein Select -First 1 an die Pipe hängen müssen (s. oben), da sieht man mal wieder das die Leute hier nicht mal im Ansatz mitdenken sondern nur stur copy und paste machen ... face-sad