peter32
Goto Top

Mit PowerShell Änderungsdatum aller Dateien auf heute setzen gebündelt in einen Befehl?

Hallo,

ich habe es schon mit Suchfunktion und Google geschafft, das Änderungsdatum aller Dateien im "Testordner" 5 Jahre (per AddHours) zurückzudrehen. Allerdings über separates Skript als Umweg.
Wie kann ich das Datum nun einfach auf das Aktuelle ändern? Bestimmt ist das nicht schwer und ich bin sehr nahe dran, aber ich kapiere es einfach nicht.

PowerShell.exe -Executionpolicy ByPass -Command "& 'script.ps1'"  

script.ps1:
dir "C:\Testordner\*.*" -recurse | ?{!$_.PSIsContainer} | %{$_.LastWriteTime = (get-date $_.LastWriteTime).AddHours(-43200); $_.CreationTime = $_.LastWriteTime}  


Ich weiß, es sieht nicht schön aus usw usw., aber wie gesagt, ich möchte jetzt nicht ein PowerShell Freak werden, sondern eben nur diese eine Aufgabe damit lösen.

Vielen Dank im Voraus!

LG
Peter

Content-Key: 315739

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: agowa338
Lösung agowa338 20.09.2016 aktualisiert um 19:46:56 Uhr
Goto Top
Hallo,

Zitat von @Peter32:
ich habe es schon mit Suchfunktion und Google geschafft, das Änderungsdatum aller Dateien im "Testordner" 5 Jahre (per AddHours) zurückzudrehen. Allerdings über separates Skript als Umweg.
Nur so, es gibt auch AddYears => ".AddYears(-5)"
Wie kann ich das Datum nun einfach auf das Aktuelle ändern? Bestimmt ist das nicht schwer und ich bin sehr nahe dran, aber ich kapiere es einfach nicht.
Du hast dir deine Frage doch schon selbst beantwortet.
Du schreibst,
vor 5 Stunden = Jetzt minus 5 Stunden, wie erhalte ich die Aktuelle Uhrzeit?
Antwort: Indem du das "minus 5 Stunden weg lässt.
PowerShell.exe -Executionpolicy ByPass -Command "& 'script.ps1'"  
> 
> script.ps1:
> dir "C:\Testordner\*.*" -recurse | ?{!$_.PSIsContainer} | %{$_.LastWriteTime = (get-date $_.LastWriteTime).AddHours(-43200); $_.CreationTime = $_.LastWriteTime}  
Übersetzt in Code also folgendes:
Anstelle von
(get-date $_.LastWriteTime).AddHours(-43200) 
schreibst du einfach
get-date
.
Also so:
dir "C:\Testordner\*.*" -recurse | ?{!$_.PSIsContainer} | %{$_.LastWriteTime = get-date; $_.CreationTime = $_.LastWriteTime}  

Ich weiß, es sieht nicht schön aus usw usw., aber wie gesagt, ich möchte jetzt nicht ein PowerShell Freak werden, sondern eben nur diese eine Aufgabe damit lösen.
Schade eigentlich, PowerShell könnte dir noch so viele male die Arbeit erleichtern. Wenn du nicht gleich die Kurzform verwenden willst, sondern mit der ausgeschriebenen Form anfängst wird es auch verständlicher (lesbarer):
Get-ChildItem "C:\Testordner\*.*" -Recurse | Where-Object { -not $_.PSIsContainer } | ForEach-Object{ $_.LastWriteTime = Get-Date; $_.CreationTime = $_.LastWriteTime }  
oder als Pseudocode:
Rufe alle Dateien und Ordner unterhalb von "C:\Testordner\*.*" ab. | Welche nicht Ordner sind. | Führe für jedes Element folgendes aus { Setze letztes Änderungsdatum auf aktuelles Datum; und Setze Erstellungsdatum auf Letzes Änderungsdatum (was jetzt aber auch das Aktuelle Datum ist.) }  

Mit freundlichen Grüßen,
agowa338

P. S. Das "$_.CreationTime = $_.LastWriteTime" kannst du in "$_.CreationTime = Get-Date" änder, hat den gleichen Effekt und ist weniger verwirrend.
Wenn du aber das Aktuelle Änderungsdatum als Erstellungsdatum speichern willst und anschießend das Änderungsdatum auf heute setzen, musst du die beiden teile austauschen.
Mitglied: Peter32
Peter32 22.09.2016 um 15:47:03 Uhr
Goto Top
Danke! face-smile