doskias
Goto Top

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:

# 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.

Content-Key: 257894

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

Printed on: April 16, 2024 at 20:04 o'clock

Mitglied: 114757
Solution 114757 Dec 17, 2014 updated at 10:09:00 (UTC)
Goto Top
# # 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  
}
Gruß jodel32
Member: Doskias
Doskias Dec 17, 2014 at 10:08:56 (UTC)
Goto Top
Danke. Musste zwar zweimal schauen um die Änderung im Copy-item überhaupt zu erkennen, aber so funktioniert es. Zumindest in der Testumgebung. Werde das ganze jetzt mal auf dem Echt-System mit einem Testbenutzer ausgibig quälen.