Viele kennen es. Es steht wieder einmal eine Migration an und wieder einmal  tritt das Problem mit nicht übernommenen Attributen auf. In unserem Fall handelt es sich um eine ShareGate-Migration von O365 auf ein lokales FileShare. Aber die Dateiattribute “Erstellt” und “Geändert” sind vom Zeitpunkt der Migration selbst und spiegeln nicht den letzten Bearbeitungsstatus wieder. Hierfür gibt es aber Abhilfe! Im folgenden Beitrag zeigen wir ein simples Code-Snippet, welches mit dem aus ShareGate exportierten CSV die originalen Änderungsdaten an den lokalen Files setzt. Somit kannst du die Erstellt und Geändert Attribute nach der Migration ganz leicht wiederherstellen.

Das aus ShareGate exportierte CSV zum Wiederherstellen der Erstellt und Geändert Attribute nach einer Migration

Erstellt und Geändert Attribute nach Migration - ShareGate CSV

Dieses File enthält die notwendigen Attribute. Mit PowerShell ist es ein leichtes diese zu iterieren und an den lokalen Files neu zu setzen.

Dies ist das PowerShell Code-Snippet, welches die “Erstellt” und “Geändert” Attribute auf ShareGate Files setzt:

$csv = Import-Csv "E:\Export\ShareGateAttributes.csv" -Delimiter ';'
$RootFolder = "E:\ShareGate Export\"

#Process the Line that's currently in the pipeline
$csv | ForEach-Object {
    #Correct ShareGate URL folder format    
    $filePath = $RootFolder + $_.DestinationPath.Replace("/","\")

    #Modifiy local created/modified according to CSV
    try {
        $(Get-Item $filePath).creationtime = $(Get-Date $_.Created)
        $(Get-Item $filePath).lastwritetime = $(Get-Date $_.Modified)
    }
    catch {
        Write-Error $_ -BackgroundColor Red
    }
}

Mit Hilfe dieser paar Zeilen, in der PowerShell passiert die ganze Magie.
Hier erfolgt die Zuweisung der O365 ShareGate Export-Files der “Erstellt” und “Geändert” Daten.

Zur Funktionsweise des Scripts zur Wiederherstellung der “Erstellt” und “Geändert” Attribute nach einer Migration:
Ein Import liest das ShareGate CSV ein. Danach erkennt PowerShell bereits die Spalten im Header selbstständig und stellt diese im Objekt bereit.
Mittels dem ForEach-cmdlet liest man Zeile für Zeile aus, holt sich das entsprechend lokale File und setzt die Daten.