falkstephan
Goto Top

BATCH - Attribute ändern für Dateien eines bestimmten Alters

Hallo liebe Leute,

Ich habe folgendes Problem und komme nicht weiter:
Auf einem Server liegt der Ordner "Test" in diesem mehrere Unterordner, z.B. "1" "2" "3" usw., in diesen ebenfalls ein paar Ordner und in diesen Dateien wie doc, docx, txt usw.

Jetzt ist gewünscht das alle Dateien die ein Alter von 30 Tagen erreichen automatisch das Attribut schreibgeschützt und eventuell noch systemdatei bekommen, alle Dateien jünger als 30 Tage sollen jedoch davon nicht betroffen werden.

Mein Ansatz bisher wäre:

FORFILES /P C:\Test /S /M *.* /D -30

dann

attrib +r C:\Test\*.* /S

nur schaffe ich es nicht diese CMDs zusammen zu bringen, vielleicht schon Tunnelblick ;)

FORFILES /P C:\Test /S /M *.* /D -30 /C "%comspec% attrib +r C:\Test\*.*"

Ich suche praktisch eine Lösung das der attrib nur auf die Dateien angewendet wird die mit FORFILES definiert werden, ob in der CMD oder PS ist egal, ist ein Server 2016

Vielen lieben Dank, für Hilfe wäre ich euch sehr verbunden.

Content-ID: 395975

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

137846
Lösung 137846 18.12.2018 aktualisiert um 10:26:50 Uhr
Goto Top
Schneller Powershell Einzeiler:
gci 'C:\test' -file -recurse  | ?{!($_.Attributes -band [System.IO.FileAttributes]::ReadOnly) -and $_.LastWriteTime -lt (get-date).AddDays(-30)} | %{[System.IO.File]::SetAttributes($_.FullName,'ReadOnly,System')}  
Zur Info: Das Skript gibt nichts in der Konsole aus, es verarbeitet lediglich die passenden Dateien.

Gruß A.
falkstephan
falkstephan 18.12.2018 um 10:27:21 Uhr
Goto Top
Du bist ab heute mein Idol face-smile
137846
137846 18.12.2018 aktualisiert um 10:29:15 Uhr
Goto Top
Zitat von @falkstephan:

Du bist ab heute mein Idol face-smile
p.s. Billy ist nicht mein Vorname face-smile.
falkstephan
falkstephan 18.12.2018 um 10:31:11 Uhr
Goto Top
Ganz dumm gefragt, hätte sich das überhaupt mit der CMD lösen lassen?
137846
Lösung 137846 18.12.2018 aktualisiert um 10:36:12 Uhr
Goto Top
Zitat von @falkstephan:
Ganz dumm gefragt, hätte sich das überhaupt mit der CMD lösen lassen?
Ja.
forfiles /M *.* /P C:\test /S /D -30 /c "cmd /c attrib +r +s @path"  
falkstephan
falkstephan 18.12.2018 um 10:36:24 Uhr
Goto Top
Hast du bitte die Luft mir das noch kurz aufzuzeigen damit ich weiss was ich falsch gemacht habe?
137846
137846 18.12.2018 um 10:36:36 Uhr
Goto Top
s.o.
falkstephan
falkstephan 18.12.2018 um 10:38:20 Uhr
Goto Top
Oh fantastisch, danke danke danke, ich nehme auf jeden Fall PS aber so weis ich wo der Fehler lag, danke danke danke face-smile
falkstephan
falkstephan 18.12.2018 um 12:45:00 Uhr
Goto Top
Zitat von @137846:

Schneller Powershell Einzeiler:
> gci 'C:\test' -file -recurse  | ?{!($_.Attributes -band [System.IO.FileAttributes]::ReadOnly) -and $_.LastWriteTime -lt (get-date).AddDays(-30)} | %{[System.IO.File]::SetAttributes($_.FullName,'ReadOnly,System')}  
> 
Zur Info: Das Skript gibt nichts in der Konsole aus, es verarbeitet lediglich die passenden Dateien.

Gruß A.

Eine letzte Frage, wie muss ich es abändern das er sich nicht am letzten Dateizugriff sondern am Erstelldatum orientiert? Nach dem ändern von $_.LastWriteTime zu $_.CreationTime funktioniert das Skript nicht mehr
137846
137846 18.12.2018 aktualisiert um 12:53:09 Uhr
Goto Top
Zitat von @falkstephan:
Eine letzte Frage, wie muss ich es abändern das er sich nicht am letzten Dateizugriff
Du meinst letzte Änderung! Dateizugriff wäre $_.LastAccessTime
sondern am Erstelldatum orientiert? Nach dem ändern von $_.LastWriteTime zu $_.CreationTime funktioniert das Skript nicht mehr
Doch geht hier auch damit einwandfrei! Bedenke das das Skript nur Dateien verarbeitet die das Readonly Flag noch nicht haben, damit nicht jede Datei die schon readonly ist, erneut angefasst werden muss ...
Das Erstelldatum muss natürlich älter als 30 Tage sein! Der Fehler liegt also auf deiner Seite.
falkstephan
falkstephan 18.12.2018 um 13:20:20 Uhr
Goto Top
Zitat von @137846:

Zitat von @falkstephan:
Eine letzte Frage, wie muss ich es abändern das er sich nicht am letzten Dateizugriff
Du meinst letzte Änderung! Dateizugriff wäre $_.LastAccessTime
sondern am Erstelldatum orientiert? Nach dem ändern von $_.LastWriteTime zu $_.CreationTime funktioniert das Skript nicht mehr
Doch geht hier auch damit einwandfrei! Bedenke das das Skript nur Dateien verarbeitet die das Readonly Flag noch nicht haben, damit nicht jede Datei die schon readonly ist, erneut angefasst werden muss ...
Das Erstelldatum muss natürlich älter als 30 Tage sein! Der Fehler liegt also auf deiner Seite.
Danke für deine schnelle Antwort, ich habe nach dem Testen die Flags nochmal mittels attrib -r -s C:\Test\*.* /S gelöscht

Ich habe jetzt $_.CreationTime -le genommen, damit funktioniert es einwandfrei oder besteht da eine Fehlerquelle? Danke für deine Hilfe face-smile
137846
137846 18.12.2018 aktualisiert um 13:27:46 Uhr
Goto Top
Nö, solange du dieses Datum für den Vergleich heranziehen willst ist das deine Entscheidung für den Zweck deiner Anwendung die hier keiner kennt.
Bedenke aber das dich Readonly-Flags nicht vor böswilligen Veränderungen wie Ransomware &Co und Usern die Schreibzugriff auf die Ordner haben, schützen.
falkstephan
falkstephan 18.12.2018 um 13:29:05 Uhr
Goto Top
Zitat von @137846:

Nö, solange du dieses Datum für den Vergleich heranziehen willst ist das deine Entscheidung für den Zweck deiner Anwendung die hier keiner kennt.
Danke face-smile Warum es bei mir mit kleiner/gleich geht aber mit kleiner nicht verstehe ich nicht aber gut Hauptsache es geht und dafür bin ich dir wirklich dankbar. Der Zweck dahinter ist das sowenig Rollen wie Möglich nachinstalliert werden sollen aber die Anforderung aufkam den Usern für bestimmte Ordner nach 30 Tagen die Möglichkeit zu nehmen nochmals die Dateien zu bearbeiten. Daher auch der Wunsch nach CreationTime.
137846
137846 18.12.2018 aktualisiert um 14:18:57 Uhr
Goto Top
Zitat von @falkstephan:
Danke face-smile Warum es bei mir mit kleiner/gleich geht aber mit kleiner nicht verstehe ich nicht
AddDays zieht 30 Tage vom aktuellen Zeitpunkt ab, d.h. wenn 10:00 Uhr ist es auch am Vergleichsdatum -30 Tage um 10:00 Uhr. Wenn du 0:00 benötigst dann nimmst du die Date Eigenschaft denn bei dieser ist es immer 0:00 Uhr.
Der Zweck dahinter ist das sowenig Rollen wie Möglich nachinstalliert werden sollen
Naja für so einen Pippifax braucht man ja auch keine Rolle.
aber die Anforderung aufkam den Usern für bestimmte Ordner nach 30 Tagen die Möglichkeit zu nehmen nochmals die Dateien zu bearbeiten.
Das hindert die User aber nicht daran trotzdem Veränderungen daran zu machen so lange sie Ändern Rechte im Ordner haben! Sei dir dessen bewusst.
Für sowas würde ich pe ein Share erstellen auf dem nur Leserecht besteht und die Dateien am Ursprungsort durch Symlinks ersetzen die auf das ReadOnly Share zeigen.
falkstephan
falkstephan 18.12.2018 um 16:53:22 Uhr
Goto Top
Zitat von @137846:

Zitat von @falkstephan:
Danke face-smile Warum es bei mir mit kleiner/gleich geht aber mit kleiner nicht verstehe ich nicht
AddDays zieht 30 Tage vom aktuellen Zeitpunkt ab, d.h. wenn 10:00 Uhr ist es auch am Vergleichsdatum -30 Tage um 10:00 Uhr. Wenn du 0:00 benötigst dann nimmst du die Date Eigenschaft denn bei dieser ist es immer 0:00 Uhr.
Der Zweck dahinter ist das sowenig Rollen wie Möglich nachinstalliert werden sollen
Naja für so einen Pippifax braucht man ja auch keine Rolle.
aber die Anforderung aufkam den Usern für bestimmte Ordner nach 30 Tagen die Möglichkeit zu nehmen nochmals die Dateien zu bearbeiten.
Das hindert die User aber nicht daran trotzdem Veränderungen daran zu machen so lange sie Ändern Rechte im Ordner haben! Sei dir dessen bewusst.
Für sowas würde ich pe ein Share erstellen auf dem nur Leserecht besteht und die Dateien am Ursprungsort durch Symlinks ersetzen die auf das ReadOnly Share zeigen.

Punkt 1: Hat Klick gemacht, verstanden ;)
Punkt 2: Ich hätte gerne den FMRS mit RMS genommen, dann hätte man generell bestimmte Sachen besser beschränken können aber da grätscht eine Software dazwischen die mit dieser Art verwalteten Zugriffsrechten nicht klar kommt, was solls, jetzt geht es ja
Punkt 3: Keine Sorge, das bekommen Sie per GPO weggenommen, bringt ja sonst nix
Punkt 4: Die Software wie gesagt, zwar ziemlich gut zugegeben aber die arbeitet mit diesen Files nativ als Templates und ist auf einen nativen Lösungsweg angewiesen daher auch CMD oder PS

Danke dir nochmals für deine Hilfe