2 Fehler in einem Powershellscript
Hi zusammen,
wir planen aktuell eine Migration und wollen bei der Migration die Homeverzeichnisse auf einen anderen Server mit umziehen. Umziehen der Homeverezeichnisse soll per Powershell erfolgen und zwar dann wenn der User umgezogen ist. Da es sich um eine fast 4-stellige Anzahl an Usern handelt, kommt ein Kopierer aller Home-Verzeichnisse zeitgleich nicht in betracht. Das entsprechende Skript sieht wie folgt aus:
Soweit so gut. Das Skript arbeitet und kopiert alle Dateien. Und genau hier sind wir bei dem Problem Nummer 1:
In dem Home-Verzeichnis existiert ein Ordner mit dem Namen Windows. Dieser enthält Informationen, die das alte System benötigt. Auf dem neuen System werden die Daten logischerweise neu geschrieben. Daher darf der Ordner Windows nicht mit kopiert werden. Daher die exclude Option im Kopiervorgang. Der Ordner wird dennoch kopiert. liegt dies an der Kombination -force und -recurse?
Zweite Auffälligkeit:
Wenn ich das Skript in der Form ausführe, dann erhalte ich die Dateien von c:\Test in C:\Test2\Test. Es wird also jeweils ein Unterordner angelegt. Da in der echtumgebung der Ordner c:\Test durch \\server\home$\%username und c:\test2 durch \\server2\homes$\%username% geändert werden soll ist dies sehr ungünstig. Wenn ich die Variablen setze, so landen die Daten schließlich unter \\server2\homes$\%username%\%username. Wie kann ich die Erstellung des unnötigen Unterordners verhindern?
Folgeanforderung aus Nummer 2
Aktuell besteht auch das Problem, dass die Datei Migrationslog.txt direkt beim ersten Datei kopieren erstellt wird und dadurch im Kopierverlauf ebenfalls kopiert wird. Diese müsste im Anschluss gelöscht werden. Da jedoch ein separater Unterordner erstellt wird, funktioniert die letzte Codezeile natürlich nicht.
wir planen aktuell eine Migration und wollen bei der Migration die Homeverzeichnisse auf einen anderen Server mit umziehen. Umziehen der Homeverezeichnisse soll per Powershell erfolgen und zwar dann wenn der User umgezogen ist. Da es sich um eine fast 4-stellige Anzahl an Usern handelt, kommt ein Kopierer aller Home-Verzeichnisse zeitgleich nicht in betracht. Das entsprechende Skript sieht wie folgt aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Pfad im altes Home-Verzeichnis.
$AH="c:\test\"
# Neues Home-Verzeichnis. .
$NH="C:\test2\"
# Prüfung ob eine Migrationslog.txt-Datei bereits vorliegt. Ist dies der Fall wird der Variable der Wert 1 zugeordnert.
# Liegt keine Datei vor, bekommt die Variable den Wert 0.
$Pruefung=Test-Path "$AH\Migrationslog.txt"
if ( $Pruefung -eq 0)
{
# Kopierjob gemäß oben angegebenen Parametern.
# -Liste der kopierten Datein wird in den Ursprungspfad mit dem Dateinamen Migrationslog.txt geschrieben
copy-item -path $AH -destination $NH -exclude $AH\Windows -force -passthru -recurse > "$AH\Migrationslog.txt"
}
remove-item $NH\Migrationslog.txt
Soweit so gut. Das Skript arbeitet und kopiert alle Dateien. Und genau hier sind wir bei dem Problem Nummer 1:
In dem Home-Verzeichnis existiert ein Ordner mit dem Namen Windows. Dieser enthält Informationen, die das alte System benötigt. Auf dem neuen System werden die Daten logischerweise neu geschrieben. Daher darf der Ordner Windows nicht mit kopiert werden. Daher die exclude Option im Kopiervorgang. Der Ordner wird dennoch kopiert. liegt dies an der Kombination -force und -recurse?
Zweite Auffälligkeit:
Wenn ich das Skript in der Form ausführe, dann erhalte ich die Dateien von c:\Test in C:\Test2\Test. Es wird also jeweils ein Unterordner angelegt. Da in der echtumgebung der Ordner c:\Test durch \\server\home$\%username und c:\test2 durch \\server2\homes$\%username% geändert werden soll ist dies sehr ungünstig. Wenn ich die Variablen setze, so landen die Daten schließlich unter \\server2\homes$\%username%\%username. Wie kann ich die Erstellung des unnötigen Unterordners verhindern?
Folgeanforderung aus Nummer 2
Aktuell besteht auch das Problem, dass die Datei Migrationslog.txt direkt beim ersten Datei kopieren erstellt wird und dadurch im Kopierverlauf ebenfalls kopiert wird. Diese müsste im Anschluss gelöscht werden. Da jedoch ein separater Unterordner erstellt wird, funktioniert die letzte Codezeile natürlich nicht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 257894
Url: https://administrator.de/forum/2-fehler-in-einem-powershellscript-257894.html
Ausgedruckt am: 04.04.2025 um 19:04 Uhr
2 Kommentare
Neuester Kommentar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# # Pfad im altes Home-Verzeichnis.
$AH="c:\test"
# Neues Home-Verzeichnis. .
$NH="C:\test2"
# Prüfung ob eine Migrationslog.txt-Datei bereits vorliegt. Ist dies der Fall wird der Variable der Wert 1 zugeordnert.
# Liegt keine Datei vor, bekommt die Variable den Wert 0.
$Pruefung=Test-Path "$AH\Migrationslog.txt"
if (!$Pruefung)
{
# Kopierjob gemäß oben angegebenen Parametern.
# -Liste der kopierten Datein wird in den Ursprungspfad mit dem Dateinamen Migrationslog.txt geschrieben
copy-item -path "$AH\*" -destination $NH -force -passthru -recurse -Exclude "Windows" | out-file "$AH\Migrationslog.txt"
remove-item "$NH\Migrationslog.txt" -Force
}