Zeitstempel mit der PowerShell ändern
IT-Administratoren stehen regelmäßig vor der Aufgabe, Zeitstempel von Dateien oder Verzeichnissen nachträglich anzupassen – etwa zur Vereinheitlichung von Datenbeständen, bei Migrationen oder im Rahmen von Skripting- und Automatisierungsprozessen. Während der Windows-Explorer hierfür keine geeigneten Bordmittel bereitstellt, lassen sich entsprechende Anpassungen sowohl unter Windows 10 als auch unter Windows 11 komfortabel über die PowerShell durchführen. Zusätzliche Tools sind in vielen Fällen nicht erforderlich.
PowerShell nutzt .NET-Klassen
Die PowerShell greift hierbei auf Methoden aus dem .NET-Namensraum System.IO zurück. Für Dateien kommt die Klasse System.IO.File, für Verzeichnisse System.IO.Directory zum Einsatz. Beide stellen Methoden zur Verfügung, um die drei relevanten Zeitstempel zu manipulieren:
- CreationTime (Erstellungsdatum)
- LastAccessTime (letzter Zugriff)
- LastWriteTime (letzte Änderung)
Beispiel: Zeitstempel einer Datei ändern
Im folgenden Beispiel werden die Zeitstempel einer Datei gezielt angepasst:
$d1 = Get-Date "01.06.2017 10:00"
$d2 = Get-Date "01.06.2018 10:00"
$d3 = Get-Date "01.06.2019 10:00"
[System.IO.File]::SetCreationTime("C:\Users\Admin\Documents\Liste.pdf", $d1)
[System.IO.File]::SetLastWriteTime("C:\Users\Admin\Documents\Liste.pdf", $d2)
[System.IO.File]::SetLastAccessTime("C:\Users\Admin\Documents\Liste.pdf", $d3)
Anpassung für Verzeichnisse
Für Ordner erfolgt die Änderung analog, lediglich die Klasse wird ausgetauscht:
[System.IO.Directory]::SetCreationTime("C:\Daten\Archiv", $d1)
Mehrere Dateien gleichzeitig bearbeiten
Ein besonderer Vorteil der PowerShell liegt in der Automatisierung. So lassen sich Zeitstempel für mehrere Dateien in einem Schritt ändern, etwa mit Get-ChildItem:
Get-ChildItem "C:\Daten\*.log" | ForEach-Object {
$_.CreationTime = Get-Date "01.01.2020 00:00"
}
Alternativ können auch mehrere Zeitstempel gleichzeitig gesetzt werden:
Get-ChildItem "C:\Daten\*.txt" | ForEach-Object {
$_.CreationTime = $d1
$_.LastWriteTime = $d2
$_.LastAccessTime = $d3
}
Unterschiede zwischen Windows 10 und Windows 11
Die beschriebenen Methoden funktionieren identisch unter Windows 10 und Windows 11. Beide Betriebssysteme nutzen dieselbe .NET-Basis (ab .NET Framework bzw. .NET Core/5+ in PowerShell 7), sodass keine Anpassungen erforderlich sind. Auch die Syntax bleibt unverändert.
Ein Unterschied ergibt sich lediglich in der standardmäßig installierten PowerShell-Version:
- Windows 10: PowerShell 5.1 vorinstalliert
- Windows 11: ebenfalls PowerShell 5.1, optional zusätzlich PowerShell 7.x
Die gezeigten Befehle sind mit beiden Versionen kompatibel.
Wichtige Hinweise aus der Praxis
- Berechtigungen: Für Änderungen an Systemdateien oder fremden Benutzerverzeichnissen sind administrative Rechte erforderlich.
- NTFS erforderlich: Die Manipulation von Zeitstempeln funktioniert zuverlässig nur auf NTFS-Dateisystemen.
- LastAccessTime oft deaktiviert: Seit Windows Vista ist die Aktualisierung des Zugriffszeitpunkts standardmäßig deaktiviert, um Performance zu verbessern. Änderungen sind dennoch möglich, werden aber nicht automatisch gepflegt.
- Forensische Relevanz: Das nachträgliche Ändern von Zeitstempeln kann in Audit- oder Compliance-Szenarien problematisch sein und sollte dokumentiert erfolgen.
Fazit
Die PowerShell bietet mit Bordmitteln eine flexible und leistungsfähige Möglichkeit, Zeitstempel von Dateien und Verzeichnissen zu manipulieren. Dank der Nutzung von .NET-Klassen ist die Umsetzung sowohl unter Windows 10 als auch Windows 11 identisch und lässt sich problemlos in Skripte und Automatisierungslösungen integrieren.