Ordner und Dateien nicht ändern und löschen. Abspeichern und Lesen von Daten erlauben
Hallo,
ich bin neu hier und hoffe, dass ihr mir bei meinem Anliegen helfen könnt
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
Da ich noch in der Schreib bzw. Test-Phase bin, reduziere ich das ganze natürlich auf ein Test-Ordner, worauf ein Test-User folgende Berechtigungen bekommen soll:
Das setzen der Berechtigung zum änder/löschen funktioniert soweit, auch wenn ich im PowerShell relativ viele rote Meldungen bekomme.
Im File-System wurden alle User/Gruppen hinzugefügt mit den entsprechenden Berechtigungen.
Das Problem ist jetzt, dass ich auch keine Berechtigung habe, Dateien in den Haupt- und Unterordner zu abzuspeichern.
Gibt es hier eine Möglichkeit dies umzusetzen, ohne dem User Schreibrechte zu geben? Denn mit Schreibrechten könnte der User die Inhalte oder Namen der Order/Dateien ändern.
ich bin neu hier und hoffe, dass ihr mir bei meinem Anliegen helfen könnt
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
Da ich noch in der Schreib bzw. Test-Phase bin, reduziere ich das ganze natürlich auf ein Test-Ordner, worauf ein Test-User folgende Berechtigungen bekommen soll:
########################################################################################################################
##########################################################################################################################
#
# Author: Name
#
# Date: 23.04.2019
#
# Version: 1.00
#
# Comment: .\FolderScript.ps1 Searches for folders in the specifies filesystem and modifies the NTFS accessrights.
#
#
##########################################################################################################################
##########################################################################################################################
#
# Constants and variables
#
##########################################################################################################################
$StartPath = "\\Pfad des Ordners"
##########################################################################################################################
#
# Functions
#
##########################################################################################################################
function Process-ACL ($Folder)
{
#read current acl
$acl = Get-Acl $Folder
#disable inheritance
$acl.SetAccessRuleProtection($True, $False)
#set-owner -needed for altering the access rights
$acl.SetOwner([System.Security.Principal.NTAccount] "Lokaler Admin")
#build the new permissions
#default permissions
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-ACL Folder $acl
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("System","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-ACL $Folder $acl
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domäne\Domain Admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-ACL $Folder $acl
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domäne\user-test","ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-ACL $Folder $acl
}
##########################################################################################################################
#
# Main code
#
##########################################################################################################################
$Folders = Get-ChildItem $StartPath -recurse | ? {($_.psiscontainer)}
##################################################################################################
# main loop
foreach ($Folder in $Folders.Fullname) {
Process-ACL ($Folder)
}
# End main loop
##################################################################################################
##################################################################################################[
Das setzen der Berechtigung zum änder/löschen funktioniert soweit, auch wenn ich im PowerShell relativ viele rote Meldungen bekomme.
Im File-System wurden alle User/Gruppen hinzugefügt mit den entsprechenden Berechtigungen.
Das Problem ist jetzt, dass ich auch keine Berechtigung habe, Dateien in den Haupt- und Unterordner zu abzuspeichern.
Gibt es hier eine Möglichkeit dies umzusetzen, ohne dem User Schreibrechte zu geben? Denn mit Schreibrechten könnte der User die Inhalte oder Namen der Order/Dateien ändern.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 443574
Url: https://administrator.de/contentid/443574
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
28 Kommentare
Neuester Kommentar
Hallo,
Jetzt überlege mal was bei einen Ändern einer Datei und beim abschließenden Speichern dieser Datei ablaufen will und tut. Ohne das du also Schreibrechte hast, wird es auch mit den speichern deiner Änderung nichts. Nimm einen Testuser unbd spiele erstmal auf Dateiebene mit den Rechten deines unbekannten Wndows rum, danach kannst du es in Powershell gießen.
Gruß,
Peter
Zitat von @Lockjaw:
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
OKIch habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
Das setzen der Berechtigung zum änder/löschen funktioniert soweit, auch wenn ich im PowerShell relativ viele rote Meldungen bekomme.
OKIm File-System wurden alle User/Gruppen hinzugefügt mit den entsprechenden Berechtigungen.
OKDas Problem ist jetzt, dass ich auch keine Berechtigung habe, Dateien in den Haupt- und Unterordner zu abzuspeichern.
Hast du nicht oben anderes gesagt?Gibt es hier eine Möglichkeit dies umzusetzen, ohne dem User Schreibrechte zu geben? Denn mit Schreibrechten könnte der User die Inhalte oder Namen der Order/Dateien ändern.
OK.Jetzt überlege mal was bei einen Ändern einer Datei und beim abschließenden Speichern dieser Datei ablaufen will und tut. Ohne das du also Schreibrechte hast, wird es auch mit den speichern deiner Änderung nichts. Nimm einen Testuser unbd spiele erstmal auf Dateiebene mit den Rechten deines unbekannten Wndows rum, danach kannst du es in Powershell gießen.
Gruß,
Peter
Hi,
Admins --> Vollzugriff
Ersteller-Besitzer --> Lesen
nichts weiter.
Damit sollte jeder in diesem Ordner Dateien ablegen können. Anschließend hat der Benutzer für diese Datei nur noch Lese-Rechte.
Bedenke aber, dass jeder Ersteller einer Datei auch deren Besitzer ist und deshalb auch deren ACL jederzeit bearbeiten kann, sprich z.B. sich selbst Rechte dafür erteilen kann. Sowas müsste man mit einem nachgeorderten Prozess kompensieren, indem man dabei den Besitzer aller Dateien ändert.
E.
Edit:
Bzw. könnte man in der Freigabe den "Vollzugriff" auf "Schreiben" reduzieren. Dann kann der Besitzer auch sein Recht zum Bearbeiten der ACL nicht in Anspruch nehmen, wenn er über diese Freigabe zugreift.
Zitat von @Lockjaw:
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
Dafür sind die "Ersteller-Besitzer" da.Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht werden. Das selbe gilt auch für die Ordner.
Admins --> Vollzugriff
Ersteller-Besitzer --> Lesen
nichts weiter.
Damit sollte jeder in diesem Ordner Dateien ablegen können. Anschließend hat der Benutzer für diese Datei nur noch Lese-Rechte.
Bedenke aber, dass jeder Ersteller einer Datei auch deren Besitzer ist und deshalb auch deren ACL jederzeit bearbeiten kann, sprich z.B. sich selbst Rechte dafür erteilen kann. Sowas müsste man mit einem nachgeorderten Prozess kompensieren, indem man dabei den Besitzer aller Dateien ändert.
E.
Edit:
Bzw. könnte man in der Freigabe den "Vollzugriff" auf "Schreiben" reduzieren. Dann kann der Besitzer auch sein Recht zum Bearbeiten der ACL nicht in Anspruch nehmen, wenn er über diese Freigabe zugreift.
Moin,
ich würde folgenden Lösungsansatz verfolgen:
1. Die User bekommen Schreib-/Leserechte auf den Ordner. Damit können sie Dateien ablegen.
2. Überwachung des Ordners aktivieren, so dass mitgeloggt wird, wenn eine Datei angelegt wird.
3. In der Aufgabenplanung eine Aufgabe erstellen, die auf diesen Logeintrag triggert und die dann per Skript die Rechte der neuen Datei auf "Nur lesen" für alle und den Besitzer auf z. B. "Administrator" ändert.
Anders sehe ich keine Möglichkeit, dass so zu realisieren, dass die User auf keinen Fall mehr die Datei ändern/löschen können. Ansonsten gibt es für das revisionssichere Speichern Spezialsoftware, die auch von den entsprechenden Behörden, die das verlangen, abgenommen ist.
hth
Erik
ich würde folgenden Lösungsansatz verfolgen:
1. Die User bekommen Schreib-/Leserechte auf den Ordner. Damit können sie Dateien ablegen.
2. Überwachung des Ordners aktivieren, so dass mitgeloggt wird, wenn eine Datei angelegt wird.
3. In der Aufgabenplanung eine Aufgabe erstellen, die auf diesen Logeintrag triggert und die dann per Skript die Rechte der neuen Datei auf "Nur lesen" für alle und den Besitzer auf z. B. "Administrator" ändert.
Anders sehe ich keine Möglichkeit, dass so zu realisieren, dass die User auf keinen Fall mehr die Datei ändern/löschen können. Ansonsten gibt es für das revisionssichere Speichern Spezialsoftware, die auch von den entsprechenden Behörden, die das verlangen, abgenommen ist.
hth
Erik
Hallo,
https://social.technet.microsoft.com/Forums/ie/de-DE/52494e91-76bc-435e- ...
https://social.technet.microsoft.com/Forums/windowsserver/de-DE/b43558a1 ...
https://www.msxfaq.de/windows/vererbung.htm
Was liefert dir dies?
Gruß,
Peter
Zitat von @Lockjaw:
Doch stellt sich mir die Frage, wie ich bestimmten Unterordner andere Berechtigungen vergebe, da es Ordner gibt, die eine weitere Ebene haben, die nicht geändert werden darf.
Vererbung der Ordner und somit deren RechteDoch stellt sich mir die Frage, wie ich bestimmten Unterordner andere Berechtigungen vergebe, da es Ordner gibt, die eine weitere Ebene haben, die nicht geändert werden darf.
https://social.technet.microsoft.com/Forums/ie/de-DE/52494e91-76bc-435e- ...
https://social.technet.microsoft.com/Forums/windowsserver/de-DE/b43558a1 ...
https://www.msxfaq.de/windows/vererbung.htm
if {($Folder -eq $Folder.EndsWith("_00"))
Gruß,
Peter
Hallo,
Und? Prüfst du ob Nichts auch wirklich zurück gegeben wird? Was soll dein IF denn prüfen bzw. auswerten? Nichts?
Gruß,
Peter
Und? Prüfst du ob Nichts auch wirklich zurück gegeben wird? Was soll dein IF denn prüfen bzw. auswerten? Nichts?
Gruß,
Peter
Hallo,
https://www.pythonforbeginners.com/code-snippets-source-code/python-os-l ...
Gruß,
Peter
Zitat von @Lockjaw:
Mit der If-Bedingung möchte ich prüfen, ob die Schleife an einem bestimmten Ordner angekommen ist, der die Endung "_00" hat. Wenn dem so ist, soll er ein anderen String ausgeben.
Ordner haben in der Regel keine Endung, eine Datei aber schon. Sicher das dein $Folder.EndsWith richtig ist? Gibt es denn diesen Ordner mit _00 am Ordnernamenende oder erwartet er dort auch eine Punkt vorher?Mit der If-Bedingung möchte ich prüfen, ob die Schleife an einem bestimmten Ordner angekommen ist, der die Endung "_00" hat. Wenn dem so ist, soll er ein anderen String ausgeben.
https://www.pythonforbeginners.com/code-snippets-source-code/python-os-l ...
Gruß,
Peter
Moin,
Woher soll ich das wissen. Ist Dein Skript. Aber wenn es so ist, dann hast Du eben ein System.IO.Fileinfo-Objekt in der Variablen. Und darauf kannst du direkt die Methode endswith nicht anwenden. Aber so sollte es gehen:
Die Eigenschaft fullname ist vom Typ String und darauf lässt sich die Methode wieder anwenden.
hth
Erik
Zitat von @Lockjaw:
Hallo,
Nein. Es gibt zwar eine Variable Namens $Folders, die aus einem get-childitem kommt, nicht aber $Folder.
Könnte es sein, dass $Folder die Daten von $Folders bekommt bei der foreach-Schleife?
Hallo,
Nein. Es gibt zwar eine Variable Namens $Folders, die aus einem get-childitem kommt, nicht aber $Folder.
Könnte es sein, dass $Folder die Daten von $Folders bekommt bei der foreach-Schleife?
Woher soll ich das wissen. Ist Dein Skript. Aber wenn es so ist, dann hast Du eben ein System.IO.Fileinfo-Objekt in der Variablen. Und darauf kannst du direkt die Methode endswith nicht anwenden. Aber so sollte es gehen:
if ($folder.fullname.endswith("_00")) { ... }
Die Eigenschaft fullname ist vom Typ String und darauf lässt sich die Methode wieder anwenden.
hth
Erik
Zitat von @Pjordorf:
Hallo,
https://www.pythonforbeginners.com/code-snippets-source-code/python-os-l ...
Hallo,
Zitat von @Lockjaw:
Mit der If-Bedingung möchte ich prüfen, ob die Schleife an einem bestimmten Ordner angekommen ist, der die Endung "_00" hat. Wenn dem so ist, soll er ein anderen String ausgeben.
Ordner haben in der Regel keine Endung, eine Datei aber schon. Sicher das dein $Folder.EndsWith richtig ist? Gibt es denn diesen Ordner mit _00 am Ordnernamenende oder erwartet er dort auch eine Punkt vorher?Mit der If-Bedingung möchte ich prüfen, ob die Schleife an einem bestimmten Ordner angekommen ist, der die Endung "_00" hat. Wenn dem so ist, soll er ein anderen String ausgeben.
https://www.pythonforbeginners.com/code-snippets-source-code/python-os-l ...
Nee, die Methode endswith liefert true, wenn ein String mit der angegebenen Zeichenkette endet. Das hat nichts mit Dateiendungen zu tun, auch wenn man das gerne dafür nimmt. Das Problem ist mit ziemlicher Sicherheit, dass die Variable $folder kein String-Objekt ist, sondern ein System.IO.File-Objekt. Darauf lässt sich die Methode nicht anwenden. Deshalb ist das dann immer false und das Skript macht weiter bei else.
Zitat von @Lockjaw:
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten
in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht
werden. Das selbe gilt auch für die Ordner.
Das setzen der Berechtigung zum änder/löschen funktioniert soweit, auch wenn ich im PowerShell relativ viele rote Meldungen bekomme.
Im File-System wurden alle User/Gruppen hinzugefügt mit den entsprechenden Berechtigungen.
Das Problem ist jetzt, dass ich auch keine Berechtigung habe, Dateien in den Haupt- und Unterordner zu abzuspeichern.
Gibt es hier eine Möglichkeit dies umzusetzen, ohne dem User Schreibrechte zu geben? Denn mit Schreibrechten könnte der User die Inhalte oder
Namen der Order/Dateien ändern.
Ich habe vor, die Berechtigungen für Ordner und Unterordner per PowerShell Skript zu vergeben. Dabei sollen alle (bis auf die Admins) nur Daten
in die (Unter)Ordnern ablegen können und diese öffnen. In diesem Ordner dürfen die Dateien (Inhalt und Name) nicht geändert oder gelöscht
werden. Das selbe gilt auch für die Ordner.
Das setzen der Berechtigung zum änder/löschen funktioniert soweit, auch wenn ich im PowerShell relativ viele rote Meldungen bekomme.
Im File-System wurden alle User/Gruppen hinzugefügt mit den entsprechenden Berechtigungen.
Das Problem ist jetzt, dass ich auch keine Berechtigung habe, Dateien in den Haupt- und Unterordner zu abzuspeichern.
Gibt es hier eine Möglichkeit dies umzusetzen, ohne dem User Schreibrechte zu geben? Denn mit Schreibrechten könnte der User die Inhalte oder
Namen der Order/Dateien ändern.
Hier so wie ich es machen würde. Dann brauchst du kein umfangreiches Konstrukt:
- Dummy-Ordner erstellen und die Rechte entsprechend anpassen. Da kannst du auch die Vererbung brechen, wenn du willst obwohl ich damit vorsichtig sein würde.
- Die Rechte des Dummy-Ordners auf das Ziel übertragen. Das Script dazu:
$destinationFolders = [System.IO.Directory]::GetDirectories("<destination folder path>", '*.*' , [System.IO.SearchOption]::AllDirectories)
$i = 0
foreach ($folder in $destinationFolders)
{
Write-Host -"Folder: $folder"
if($i -gt 1) #in der Hirarchie der 3te Ordner
{
Get-Acl -Path "<my prepared folder path>" | Set-Acl $folder
}
$i++
}
Wenn du das ganze nun auf eine andere Maschine kopierst (Also auch den Dummy-Ordner) sollten in einem NTFS-System die Rechte beibehalten werden. Das geht aber nur, wenn auf der Ziel-Maschine die gleichen Benutzer usw. vorhanden sind wie auf der Quelle. Darum empfiehlt es sich mit Domain-Prinzipals bzw Built-In-Prinzipals zu arbeiten und nicht mit lokalen Benutzern oder mit Benutzern aus der Gruppe Benutzer.
In meinem test Funktioniert das einwandfrei.
siehe dazu auch:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
> In D:\Script2.0.ps1:148 Zeichen:9
> + if ($Folder.FullName.EndsWith("_00")){
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidOperation: (:) , RuntimeException
> + FullyQualifiedErrorId : InvokeMethodOnNull
Soll dass heißen, dass dieser Pfad nicht gefunden wird? NULL steht ja für gewöhnlich "kein Wert" bzw. "Leer".
Ich glaube eher dass ".FullName" nicht gefunden wird. Je nachdem wie du dir das Objekt holst kann $Folder ein String oder ein Objekt sein.
Ein kleiner Tipp falls du das so nicht machst:
Verwende die Powershell ISE. Da kannst du Haltepunkte setzen und mit Mouse-Over direkt den Wert im Object prüfen oder schnell mal in den Console-Teil der ISE wechseln und das Object vorm Haltepunkt weiter bearbeiten/analysieren. Sehr praktisch!
und da Powershell zwar super praktisch ist und zudem noch das .Net Framework versteht, aber manchmal echt GAGA ist, enpfielt es sich mache Methoden aus dem Framework direkt zu nutzen
Bsp:
usw. Siehe auch: https://docs.microsoft.com/en-us/dotnet/api/system?view=netframework-4.7 ...
Verwende die Powershell ISE. Da kannst du Haltepunkte setzen und mit Mouse-Over direkt den Wert im Object prüfen oder schnell mal in den Console-Teil der ISE wechseln und das Object vorm Haltepunkt weiter bearbeiten/analysieren. Sehr praktisch!
und da Powershell zwar super praktisch ist und zudem noch das .Net Framework versteht, aber manchmal echt GAGA ist, enpfielt es sich mache Methoden aus dem Framework direkt zu nutzen
Bsp:
[Regex]::Split($myVar,",")}
if([regex]::Match($myVar, "(\*)", [System.Text.RegularExpressions.RegexOptions]::IgnoreCase).Success)
$destinationFolders = [System.IO.Directory]::GetDirectories("<destination folder path>", '*.*' , [System.IO.SearchOption]::AllDirectories)
usw. Siehe auch: https://docs.microsoft.com/en-us/dotnet/api/system?view=netframework-4.7 ...
Moin,
Jo, jetzt habe ich die Zeile gefunden. Das müsste einfach so gehen. Ich habe das mal nachgebaut:
und das geht ohne Probleme. Meine Vermutung war falsch. Die Foreach-Schleife kopiert nur fullname in die Laufvariable. Also steht da ein String drin und der kennt die Methode Endswith. Das klappt auch ohne Probleme hier bei mir.
Nicht ganz. Das steht für "Ist nicht vorhanden". Und da hat die Shell wie immer recht. Da ja schon Fullname als String in der Variablen steht, hat die Variable keine Eigenschaft "fullname" mehr.
Liebe Grüße
Erik
Zitat von @Lockjaw:
Hatte Anfangs ja mein Script hier reinkopiert gehabt^^ An der Foreach Bedinung habe ich bisher nichts geändert gehabt.
Hatte Anfangs ja mein Script hier reinkopiert gehabt^^ An der Foreach Bedinung habe ich bisher nichts geändert gehabt.
Jo, jetzt habe ich die Zeile gefunden. Das müsste einfach so gehen. Ich habe das mal nachgebaut:
$Folders = Get-ChildItem -recurse | ? {($_.psiscontainer)}
foreach ($Folder in $Folders.Fullname) {
write-host $Folder
if($folder.endswith("04")) {
write-host "Endet mit 04"
}
}
und das geht ohne Probleme. Meine Vermutung war falsch. Die Foreach-Schleife kopiert nur fullname in die Laufvariable. Also steht da ein String drin und der kennt die Methode Endswith. Das klappt auch ohne Probleme hier bei mir.
Soll dass heißen, dass dieser Pfad nicht gefunden wird? NULL steht ja für gewöhnlich "kein Wert" bzw. "Leer".
Nicht ganz. Das steht für "Ist nicht vorhanden". Und da hat die Shell wie immer recht. Da ja schon Fullname als String in der Variablen steht, hat die Variable keine Eigenschaft "fullname" mehr.
Liebe Grüße
Erik
Und woran lag's, dass es erst nicht funktioniert hat?
Moin,
Hier liest Du also wie auch immer die Liste der Folder in die Variable $FolderList ein. Was soll das $a?
$true ist immer wahr. Daher gibt while($true) eine Endlosschleife. Was soll die?
OK, hier liest Du also die einzelnen Ordner in die Variable $item ein.
Und wo kommt nun plötzlich das Objekt $folders her? Das gibt es in diesem Skript nicht.
Ernshaft?
Du machst so ziemlich alles falsch, was man nur falsch machen kann. Du solltest Dich mal mit den Grundlagen der Schleifenprogrammierung beschäftigen.
https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
Du kannst nicht einfach die Namen der Variablen und Objekte hier mal so und da mal anders benennen. Das muss schon Sinn machen und zusammenpassen.
Liebe Grüße
Erik
Hier liest Du also wie auch immer die Liste der Folder in die Variable $FolderList ein. Was soll das $a?
> while($true){
$true ist immer wahr. Daher gibt while($true) eine Endlosschleife. Was soll die?
$item = $FolderList[$a]
> $a++
OK, hier liest Du also die einzelnen Ordner in die Variable $item ein.
> foreach ($Folder in $Folders.FullName){
Und wo kommt nun plötzlich das Objekt $folders her? Das gibt es in diesem Skript nicht.
ResetAllDomainACL ($Folder)
>
> if($Folder.EndsWith($item)){
> Load-ACL($Folder)
> write-host "Ordner wird geändert:" $item}
> else{ Protect-ACL($Folder)}
> }
>
> if ($a -eq 27) {break}
Ernshaft?
Beim Ausführen bekomme ich kein Fehler ausgespuckt aber die Ordner haben weiterhin die Berechtigung aus der Funktion Protect-ACL.
Die Ausgabe write-host wird ausgeführt. Also sieht das für mich so aus, als ob das Skript zwar den abgefragten Ordner findet, die Berechtigungen darauf aber nicht ändert. Woran kann es liegen? bzw. was mache ich hier falsch?
Die Ausgabe write-host wird ausgeführt. Also sieht das für mich so aus, als ob das Skript zwar den abgefragten Ordner findet, die Berechtigungen darauf aber nicht ändert. Woran kann es liegen? bzw. was mache ich hier falsch?
Du machst so ziemlich alles falsch, was man nur falsch machen kann. Du solltest Dich mal mit den Grundlagen der Schleifenprogrammierung beschäftigen.
https://www.windowspro.de/script/schleifen-powershell-foreach-while-do-u ...
Du kannst nicht einfach die Namen der Variablen und Objekte hier mal so und da mal anders benennen. Das muss schon Sinn machen und zusammenpassen.
Liebe Grüße
Erik