Zum Inhalt springen

Bestehende Ordnerstruktur auf neuem Server abbilden

Aktuell stehe ich vor der Aufgabe ein paar ERP-Server per Inplace Upgrade zu aktualisieren oder wenn das unschön läuft, neu zu machen.
Im letzteren Fall habe ich stets eine zweiten Platte auf der eine gewisse identische Ordnerstruktur auf allen ERP-Server besteht.
Diese könnte ich entweder jedes Mal manuell erstellen (30 min plus) oder mir was zur Automatisierung überlegen.

Also Suchmaschine anwerfen und schauen, ob es da schon was gibt.
Vermutlich habe ich mit falschen Begriffen gesucht oder nur steinalte Einträge gefunden, die alle irgendwie seltsam waren.
Also selbst was entwickeln.
Der Anfang ist zunächst noch leicht.

Ein PowerShell-Einzeiler nimmt rekursiv alle Ordner, sortiert diese nach dem Fullname und schreibt diesen in eine Text-Datei aus.
(Fullname ist eine Eigenschaft von Get-ChildItem und gibt den vollen Pfadnamen aus.)

Get-ChildItem E:\temp -Recurse -Directory | Sort-Object fullname | Select-Object -ExpandProperty fullname | Out-File -FilePath e:\temp\verzeichnisliste.txt -Encoding default

Der zweite Teil war etwas kniffliger.
Und zwar genau bis zu dem Zeitpunkt, als mir das Commandlet “Split-Path” wieder einfiel.
Dieses hat die schönen Parameter “-leaf” und “-parent”.
“Leaf” ist das letzte Element in einem Pfad, also der Ordnername.
“Parent” ist alles davor.

Beispiel: bei dem Fullname “d:\temp\testpfad\eintrag1” ist der Parent “d:\temp\testpfad\” und “eintrag1” das Leaf.

Jetzt muss nur noch alles auf dem Zielserver Schritt für Schritt ausgeführt werden.
Da die Pfade bereits beim Export sortiert wurden, ist nicht mehr viel zu tun.
Die Liste einlesen, jeden Eintrag in die zwei Elemente aufteilen und ein neues Element erzeugen.

$collection = (Get-Content -Path e:\temp\verzeichnisliste.txt)

foreach ($item in $collection) {

    $pfadteil = Split-Path -Path $item -Parent

    $letzteselement = Split-Path -Path $item -Leaf

    New-Item -Path $pfadteil -Name $letzteselement -ItemType Directory

}