pcpanik
Goto Top

Hilfe bei einfachem Powershell Copy-Script

Halo zusammen,

ich habe leider keine Powershell Erfahrung, brauche aber nun ein Script, welches ich per Taskplaner 1x/Monat ausführen will

Es soll folgendes passieren:

Ich möchte 1x/Monat Zip Dateien vom Backupserver auf eine SMB Freigabe kopieren und will dort 2 Versionen aufheben.

Die Idee:

Abfrage des aktuellen Monats
Erstellen des Ordners auf der Freigabe ("03" für März, "04" für April usw.)
Kopieren der Quelldateien in den aktuellen Zielordner
Wenn erfolgreich, löschen des Ordners abzüglich 2 Monate (im aktuellen Fall dann eben "01")

Kann man mir dabei wohl bitte helfen?

Ich habe mir schon ein wenig heraus gesucht:

mit get-date month kriege ich das Datum des Monats
mit New-Item -Path $filepath -ItemType Directory erstelle ich das Verzeichnis
mit copy-item starte ich den Kopiervorgang

...aber ab hier endet es dann mit meinem Wissen, insbesondere die Logik muss ja gebaut werden

Musste mich damit halt noch nicht beschäftigen.

Hat jemand Zeit, Lust und Interesse mir dabei zu helfen, bitte?

Content-ID: 331678

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

132658
Lösung 132658 09.03.2017 aktualisiert um 14:28:41 Uhr
Goto Top
Sodele...
$monthfolder = "\\Server\Freigabe\$(get-date -F 'MM')"  
if (!(Test-path $monthfolder)) {md $monthfolder}
copy-item "E:\Daten\*.zip" -Destination $monthfolder  
gci "\\Server\Freigabe" | ?{$_.PSIsContainer} | sort CreationTime -Desc | select -skip 2 | remove-item -Recurse -Force  
Und tschüss
Gruß schnappi
pcpanik
pcpanik 09.03.2017 aktualisiert um 15:02:19 Uhr
Goto Top
Meinen sehr sehr herzlichen Dank für Deine Hilfe und dass Du es mir gleich gebaut hast! Merci!

Funktioniert face-smile

Ich verstehe nur die letzte Zeile nicht ganz. Magst Du sie mir eventuell noch erklären?

gci steht wohl für get-childItem > Fragt also den Inhalt der Freigabe ab
Aber wofür steht ?{$_.PSIsContainer} ?
Dann wird wohl mit sort CreationTime -Desc sortiert, nach Erstellungsdatum in absteigender Reihenfolge
slect -skip 2 wird hier dann schlicht um 2 Objekte in der absteigendne Reihenfolge vorgegangen und dann gewählt?
remove-item -Recurse - Force ist klar.
132658
132658 09.03.2017 um 15:11:45 Uhr
Goto Top
Zitat von @pcpanik:

gci steht wohl für get-childItem > Fragt also den Inhalt der Freigabe ab
Ja
Aber wofür steht ?{$_.PSIsContainer} ?
Prüft ob es sich um einen Ordner handelt, denn gci liefert Dateien und Ordner. Das stellt sicher das nur Ordner genommen werden, das ?{} ist eine Abkürzung für das Where-Object.
Dann wird wohl mit sort CreationTime -Desc sortiert, nach Erstellungsdatum in absteigender Reihenfolge
Ja.
slect -skip 2 wird hier dann schlicht um 2 Objekte in der absteigendne Reihenfolge vorgegangen und dann gewählt?
Hier werden die zwei obersten Ordner der sortierten Pipeline übersprungen (die neuesten) und der Rest dann gelöscht.
pcpanik
pcpanik 09.03.2017 um 15:15:23 Uhr
Goto Top
Danke schön. Wieder etwas gelernt.
132658
Lösung 132658 09.03.2017 aktualisiert um 15:19:58 Uhr
Goto Top
Nur noch zur Info, das
?{$_.PSIsContainer}
brauchst du nur wenn du noch mit Powershell 2.0 arbeitest, ab 3.0 kannst du die Parameter -File oder in diesem Fall -Directory von get-ChildItem verwenden um das selbe zu erreichen.
pcpanik
pcpanik 09.03.2017 um 15:29:45 Uhr
Goto Top
Naja, ist Server 2012R2.
PS C:\Windows\system32> $PSVersiontable

Name Value
-----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.16384
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2

Also könnte ich einfach

gci "\\Server\Freigabe" -Directory | sort CreationTime -Desc | select -skip 2 | remove-item -Recurse -Force  

schreiben?
132658
132658 09.03.2017 aktualisiert um 15:36:02 Uhr
Goto Top
Ja, absolut. Ich schreibe nur gerne Skripte die überall laufen face-wink gerade wenn man das in Foren postet wo unwissende oft nur kopieren.
pcpanik
pcpanik 09.03.2017 um 15:56:46 Uhr
Goto Top
Klar, leuchtet ein. Ich habe von PS ja auch keinen Schimmer, aber versuche auf jeden Fall zu lernen und nachzuvollziehen.
Danke für Deine Mühe.