rb-dewis 0 Geschrieben 11. Oktober 2017 Autor Melden Teilen Geschrieben 11. Oktober 2017 (bearbeitet) OK, ich weiß nicht wie ich es anders beschreiben kann: Es gibt eine Ordnerstruktur, die als Freigabe mehreren Benutzern zur Verfügung steht. Diese Benutzer dürfen Dateien erzeugen und Ordner erzeugen und diese während des Tages ändern und löschen. Sobald der Tag um ist, soll am nächsten Tag alles was davor gemacht wurde, schreibgeschützt sein sodass keine Änderung mehr durchgeführt werden kann. Aber man kann noch neue Dateien erstellen und wieder bearbeiten/löschen während des einen Tages. Nach Abschluss des Tages werden auch diese neuen Dateien wieder schreibgeschützt (mit nur Leseberechtigung) und das ist alles was da Skript tun soll. Damit verbunden: Der oberste Ordner wird von Benutzer5 und Benutzer6 verwaltet, dh neue Benutzer werden dort hinzugefügt oder geändert. Wenn der oberste Ordner einen neuen Benutzer bekommt, so hat der Benutzer überall lese und schreibberechtigung solange bis das Skript das um Mitternacht umändert, dann hat der User dieselben Rechte, wie alle anderen User, die bei den Berechtigungen sind. Sonderwunsch: Nur ein paar User sind von den Leserechten ausgenommen und haben Vollrechte (zB user5+6). Die Anforderung kommt von einer Redaktion, die eben ihre Dateien damit sichern möchte. Es werden auch (a) Windows-Server-Backups gemacht und ( B) vorherige Windowsversionen alle 10 Minuten erstellt, aber diese Berechtigungsgeschichte gehört auch gemacht. Der Grund, wieso im Skript nicht einfach Gruppen/Benutzer berechtigt werden, liegt darin, dass diese abgeändert werden und daher das Skript ständig bearbeitet werden muss. Damit das nicht der Fall ist, sollen alle bereits vorhandenen User Leseberechtigung erhalten und nicht fixe User Leseberechtigung erteilt werden. Mein Skript sagt aber eigentich ungefähr eh alles, was ich hier in deutsch schreibe, nur leider habe ich Syntaxfehler und bräuchte zum Skripten Hilfe. Mir ist die Hilfe auch was wert und ich zahle gerne, als dass ich hier Geschichte schreiben wieso und weshalb. Ich bin natürlich gerne dafür offen, aber scheinbar stiftet meine Anfrage mehr Verwirrung als dass sie öfters vorgekommen wäre. Ich bin aber gerne bereit noch mehr Gründe zu schreiben, warum das nötig ist, als das Skript zu korrigieren. Wir könnten aber auch das Skript korrigieren und überprüfen ob es den gewünschten Erfolg bringt? Eventuell gibt es auch eine Software, die diese Berechtigungen setzt für einen Ordner/Unterordner? Ist meine Anforderung ungefähr klar? Ist das Skript ungefähr verständlich (das Skript mit den Skriptfehlern) Danke für eure Unterstützung und bitte um Skripting-Hilfe. Roman bearbeitet 11. Oktober 2017 von rb-dewis Zitieren Link zu diesem Kommentar
NilsK 2.958 Geschrieben 12. Oktober 2017 Melden Teilen Geschrieben 12. Oktober 2017 Moin, okay, das erhellt die Sache schon deutlich. Danke für die Mühe. Den Use-Case kann ich jetzt einigermaßen nachvollziehen, aber aus Erfahrung bin ich sehr skeptisch, dass Berechtigungen und Skripte für solche Workflows geeignet sind. Die Fehlermöglichkeiten sind sehr groß, und je länger das System lebt, desto länger wird ein Skript laufen müssen und desto größer ist das Fehlerrisiko. Dazu kommt, dass viele Anwendungen mit solchen komplexen Berechtigungen nicht klarkommen. Daher würde ich über andere Ansätze nachdenken. Ein einfacherer und weniger fehlerträchtiger Ansatz wäre eine Mechanik, die zum Tageswechsel die neuen Dateien in eine separate Ordnerstruktur verschiebt, wo es nur Leserechte gibt. Wenn man das über Freigabeberechtigungen abbildet, muss man keine einzige NTFS-Berechtigung ändern. So ginge das schnell und mit sehr geringem Fehlerrisiko. Gleichzeitig wären die Metadaten bei den verschobenen Dateien unverändert, man könnte sie also später bei Bedarf auswerten oder anderweitig nutzen. Gibt es für die Redaktion kein Redaktionssystem? Ich denke, bei solchen Wünschen kommt sowas schnell ins Blickfeld. Gruß, Nils Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 12. Oktober 2017 Melden Teilen Geschrieben 12. Oktober 2017 Solche Anforderungen sollten sich mit einem DMS umsetzen lassen. Berechtigungen stehen dann in einer Datenbank, die sich Nachts mit einem Script modifizieren lassen. Oder es werden "neue" Dateien in einen anderen Ordner umgehängt. Dabei müssen auch keine Dateien bewegt werden. Zitieren Link zu diesem Kommentar
rb-dewis 0 Geschrieben 12. Oktober 2017 Autor Melden Teilen Geschrieben 12. Oktober 2017 (bearbeitet) Hi, ich verlier immer mehr die Hoffnung, dass ich hier Hilfe fürs Skripten finde. Mir ist schon klar, es gibt viele Wege etwas abzubilden, aber dass das Skript nicht funktioniert bei größeren Dateien verstehe ich nicht - nur in der Erhöhung der Ordner/Dateien soll das Skript dann nicht mehr funktionieren? Wenn das Skript bei 10 Ordner und 20 Dateien funktioniert, funktioniert es auch mit einer Unmenge. Sollten doch irgendwelche PRobleme sein, kann das dann nur am Skript liegen und nicht an der Idee? Über die Möglichkeit die du nennst, also das Wegverschieben, wurde nachgedacht und sie abgelehnt. Wir beginnen ja nicht täglich bei 0 mit unsern Dateien am Produktiv-Laufwerk und holen uns dann erst die letzten Stände von einem anderen Ordner her. Die Aufgabe ist es, mit geringstmöglichen Aufwand, Leseberechtigungen für bestehende Benutzer/Gruppen täglich um 24 Uhr zu setzen. Aber du hast recht, vielleicht ist das etwas zu komplex. Gehen wirs skriptmäßig viel einfacher an und ich weiß, dieser Beitrag hier kann für viele die mit Skripten beschäftigt sind, wertvoll sein. Und viele haben wissen auch wie :-) Ich verändere Dateiberechtigungen für den Benutzer1 wie folgt: $path = "C:\Test" $Right = "Read" foreach ($file in $(Get-ChildItem $path -Recurse)) { $rule = new-object System.Security.AccessControl.FileSystemAccessRule("domain\Benutzer1",$Right,"Allow") $acl.SetAccessRule($rule) set-acl $File.Fullname $acl } Das funktioniert und setzt bei entsprechend richtig eingestellter Vererbung zum gewünschten Erfolg. Wie finde ich nun die aktuellen Benutzer raus? So: $path = "C:\Test" foreach ($file in $(Get-ChildItem $path -Recurse)) { Get-ACL $path | select -ExpandProperty Access | SELECT IdentityReference } Das gibt mir die Benutzer/Gruppen der einzelnen Dateien raus. Und jetzt möchte ich beides kombinieren und das haut noch nicht richtig hin :-| Kannst du damit was anfangen? bearbeitet 12. Oktober 2017 von rb-dewis Zitieren Link zu diesem Kommentar
Dr.Melzer 191 Geschrieben 12. Oktober 2017 Melden Teilen Geschrieben 12. Oktober 2017 ich verlier immer mehr die Hoffnung, dass ich hier Hilfe fürs Skripten finde. Mir ist schon klar, es gibt viele Wege etwas abzubilden, aber dass das Skript nicht funktioniert bei größeren Dateien verstehe ich nicht - nur in der Erhöhung der Ordner/Dateien soll das Skript dann nicht mehr funktionieren?Das funktioniert und setzt bei entsprechend richtig eingestellter Vererbung zum gewünschten Erfolg. Du findest hier ausgewiesene Experten, die dir helfen ein Problem zu lösen. Das kann auch bedeuten, dass sie dir sagen, dein Lösungsweg ist nicht der beste und birgt Risiken. So wie Nils sagt, dass dein Lösungsweg auf lange Sicht aufgrund der Komplexität fehleranfällig werden wird und deswegen einen anderen Lösungsansatz vorschlägt. Leute wie Nils, Zahni oder Dukel sind langjährige Profis auf ihren Gebieten und kennen die Risiken und Vorteile die verschiedene Lösungsansätze bringen. Vielleicht denkst du mal darüber nach ob es nicht schlauer wäre dein Problem auf einem anderen Weg zu lösen als mit dem von dir gewünschten Script. Wenn du dich aber trotzdem für das Script entscheidest dann lass es uns wissen, erläutere uns deine Beweggründe und dann wird sich zeigen ob jemand dir beim Scripten hilft. Es ist allerdings für jemanden der nicht an deinen Lösungsweg glaubt schwierig dir bei etwas zu helfen von dem er denkt es sei der falsche Weg. Alles Punkte die es zu bedenken gibt. Wie siehst du das? Zitieren Link zu diesem Kommentar
NilsK 2.958 Geschrieben 12. Oktober 2017 Melden Teilen Geschrieben 12. Oktober 2017 Moin, Wenn das Skript bei 10 Ordner und 20 Dateien funktioniert, funktioniert es auch mit einer Unmenge. Sollten doch irgendwelche PRobleme sein, kann das dann nur am Skript liegen und nicht an der Idee? das ist in der Theorie richtig, aber leider kommt bei sowas ja auch gern die Praxis dazu. Nur zwei Beispiele: In seltenen Fällen könnte das Skript auf einen Fehler laufen und abbrechen. Jetzt hast du riesigen Aufwand, um festzustellen, was es denn schon getan hat und wo es noch mal ansetzen muss. Selbst wenn so ein Fall nur in 0,1 Promill aller Fälle eintritt, nimmt die zu erwartende absolute Zahl dieser Fehler direkt mit der Zahl der Dateien zu. Berechtigungen per Skript, insbesondere per PowerShell, zu bearbeiten, braucht relativ viel Zeit. Bei einer Testmenge von 100 Dateien merkt man das noch nicht, bei tausenden sieht es dann ganz anders aus. Solche Skriptlösungen laufen typischerweise nach einiger Zeit der Nutzung schlicht auf Timing-Probleme. In deinem Ansatz muss das Skript ja jedesmal alle Dateien anfassen, um mindestens die Metadaten zu lesen, und wahrscheinlich muss es bei vielen davon die Metadaten auch noch ändern. Sorry, aber ich werde mich damit nicht mehr weiter befassen, weil Skriptlösungen einfach nicht das Richtige für Business-Anforderungen dieser Art sind. Gruß, Nils Zitieren Link zu diesem Kommentar
rb-dewis 0 Geschrieben 16. Oktober 2017 Autor Melden Teilen Geschrieben 16. Oktober 2017 Hallo Nils und DrMelzer, danke für eure Antworten. Ich verstehe, dass es andere Optionen und Alternativen gibt. Ich berücksichtige, dass Powershell eurer Meinung nach für diese simple Verwaltungsaufgabe des Setzens von Berechtigungen nicht geeignet ist. Ich dachte beim Erstverfassen nicht daran, andere mit diesem Skript zu gefährden sondern, Unterstützung beim Skripten zu bekommen. In meinem früheren Post habe ich dir beide Skriptteile geschrieben, die ich kombinieren möchte. Ich habe schon überlegt, alles in .Net/Visual Basic zu programmieren, denn dort sind die Befehle dazu sogut wie fast 1zu1. Ich möchte nur keine Exe-Datei kompilieren müssen, die eventuell fehlerhaft ist anstatt den Code in plaintext in einer .ps.1 Datei zu haben. Ob daher Powershell oder VB dürfte es doch auch nicht besser machen? Wisst ihr vielleicht, wer mich bei Skripten (auch gegen einen Stundensatz) unterstützen kann? Danke Zitieren Link zu diesem Kommentar
MurdocX 954 Geschrieben 16. Oktober 2017 Melden Teilen Geschrieben 16. Oktober 2017 Wisst ihr vielleicht, wer mich bei Skripten (auch gegen einen Stundensatz) unterstützen kann? Ich würde nicht "Nein" sagen ;) Die Idee hier ist ja, dass wir nicht gegen Geld, sondern aus freien Stücken helfen.. unentgeltlich. Da du Profis fragst, bekommst du auch eine dementsprechende Antwort. Lass Dir aus meiner Erfahrung ( Mehrere größere Programme in PS geschrieben ) sagen, das die Hinweise schon stimmen. Besonders bei dem Thema Berechtigung gibt es immer mal wieder interessante Fehler, die Mal auftauchen und mal nicht. Das ist nichts was einfach "mal so" unbeaufsichtigt zuverlässig funktioniert. Als Anleitung: Get-ACL // Zum Abrufen der Berechtigung Neue ACL generieren und zu der Variable hinzufügen Neue ACL auf die Datei anwenden Hier gilt es als Besonderheit, wenn dein Rechner nicht im AD ist, du aber Berechtigungen aus dem AD vergeben möchtest "kann" es Probleme beim auflösen der SID geben. Anbei einen Beispielcode aus einer kleinen Skript-Anwendung, der so nicht 1 zu 1, aber als gutes Beispiel angesehen werden kann. # Vorbereiten! $objUser = New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList ("DOMÄNE\$Benutzer") $colRights = [System.Security.AccessControl.FileSystemRights]'Modify' $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType = [System.Security.AccessControl.AccessControlType]::Allow $objACE = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) $acl = Get-Acl $FQUP $acl.AddAccessRule($objACE) # Setzen! $acl | Set-Acl $FQUP fAddMessage -Nachricht 'OK!'-OK If ($WriteActionsToLog) { $Actions = $Actions + "'OK!'" Out-File -FilePath "$PSScriptRoot\OrdnerCheck_$(Get-Date -UFormat '%Y-%m-%d')_Aenderungen.log" -InputObject $Actions -Encoding utf8 -Append } Zitieren Link zu diesem Kommentar
rb-dewis 0 Geschrieben 16. Oktober 2017 Autor Melden Teilen Geschrieben 16. Oktober 2017 Hallo Jan/MurdocX! Danke für dein Code. Ich sehe der ist in etwa dasselbe wie von mir, nur mit mehr Optionen angeführt. Ich gebe euch nicht unrecht und berücksichtige gerne eure Erfahrun im Skript-Bereich. Ich habe mir daher etwas härteres gedacht, dass keinen Grund hat, nicht zu funktionieren: Ich entferne zuerst alle Berechtigungen für eine Datei und setze sie anschließend für meine User/Gruppen mit Leseberechtigung neu. Was jetzt passieren kann ist, dass gewisse User keinen Zugriff mehr haben, aber nicht, dass sie zuviel Zugriff haben. Das Skript dazu sollte ich selbst möglich sein zu schreiben und würde ich hier anschließend posten. Danke für euren Input insgesamt. lg, Zitieren Link zu diesem Kommentar
MurdocX 954 Geschrieben 17. Oktober 2017 Melden Teilen Geschrieben 17. Oktober 2017 Ich habe mir daher etwas härteres gedacht, dass keinen Grund hat, nicht zu funktionieren: Ich glaube es wurde nicht bezweifelt das es nicht funktioniert, sondern nur auf die Zuverlässigkeit hingewiesen, die im Business-Betrieb bei regelmäßigen Prozessen höher sein sollte, als ein Skript bietet. Manchmal geht´s aber nicht anderst ;) Zitieren Link zu diesem Kommentar
Finanzamt 76 Geschrieben 23. Oktober 2017 Melden Teilen Geschrieben 23. Oktober 2017 (bearbeitet) Schönen Montag! Egal, ob Scripte oder "echte" Programme: In der Praxis unlösbare Probleme tauchten immer auf, wenn ich die Arbeit der User in der Praxis mit administrativen Vorgängen mischen wollte. Denn Userverhalten -noch so geschult, noch so restriktiv geregelt- liegt immer zwischen genialer Kreativität und abgrundtiefer Dämlichkeit.Der Thread hier erinnert mich sehr stark an ein Problem aus dem Pflegebereich. Wer nicht lückenlos dokumentiert, steht theoretisch mit einem Bein im Knast. Gelöst bekam ich das, indem ich mit einem Systemdienst dafür gesorgt habe, dass jede Dateiänderung in überwachten Bereichen mit einer Kopie der gerade geänderten Datei auf ein Ziellaufwerk (identischer Struktur) beantwortet wurde. Der Kniff bestand darin, beim Kopieren die Datei/das Verzeichnis mit dem Dateinamen plus aktuellem Timestamp YYMMDDhhmmssss umzubenennen und für lokalen Einsatz das ganze Ziellaufwerk ausschließlich auf nur W(rite) zu setzen. Was die Leute dann letztendlich in ihren Arbeitsverzeichnissen machten oder welche Rechte User / Gruppen da hatten, war dann völlig unerheblich - notfalls ließ sich alles wieder herrichten und immer auch recherchieren, wer welchen Bockmist verzapft hatte.Sorry, wenn ich mich jetzt auf dieser Ebene einklinke, aber man hat ja nicht immer im Kopf, dass ein Script als Systemdienst laufen kann und ein kompletter Baum ausschließlich W(rite) hat.Gegrüßt!-----------* seinerzeit in C, aber mit Scripten geht's mittlerweile ja auch bearbeitet 23. Oktober 2017 von Finanzamt Zitieren Link zu diesem Kommentar
rb-dewis 0 Geschrieben 23. Oktober 2017 Autor Melden Teilen Geschrieben 23. Oktober 2017 Hallo Finanzamt! Danke für deinen Beitrag! Deine Idee klingt sehr interessant. Hast du das mit einem Skript gelöst? Oder wie hast du es gelöst? Sowas würde ich gerne umsetzen, wenn ich wüsste, wo ich da ansetzen sollte. lg Zitieren Link zu diesem Kommentar
rb-dewis 0 Geschrieben 24. Oktober 2017 Autor Melden Teilen Geschrieben 24. Oktober 2017 Oh aja vielleicht zur Lösung des Themas, dann ist es gelöst. Das Skript für dieses spezielle Lese-Berechtigungsdateisystem ist erstellt und funktioniert. Mitarbeiter sind gezwungen die letztgültige Version zu kopieren bzw. unter anderem Namen abzuspeichern, also die gewünschte Versionierung.Damit ist man auch gegen Kryptoviren gesichert. Führt ein MA einen Kryptovirus aus, hat der Virus keine Rechte, dieses Laufwerk/Verzeichnis zu verschlüsseln. Der Virus würde die Tages-Daten erwischen, die per Shadow-Copy alle 10 Min gesichert werden. (Ja, das funktioniert schon seit über 1 Jahr, 500 vorherige Versionen).In Kombination mit dem CT-Restrictor sind Exe-Dateien in nicht-erlaubten-Verzeichnissen nicht erlaubt :) Wer sich für das Skript interessiert, bitte per PM Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.