Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

NTFS Berechtigungen korrigieren

$
0
0

Hallo,

ich folgendes Problem welches ich nicht aufgelöst bekomme:

Viele Ordner auf einem FileServer unter Windows Server 2012 enthalten doppelte NTFS Berechtigungen, in der Powershell sieht das so aus:

$a = get-acl .\Ordner
$a.access

FileSystemRights  : Modify, Synchronize
AccessControlType : Allow
IdentityReference : Domain\Gruppe
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : Modify, Synchronize
AccessControlType : Allow
IdentityReference : Domain\Gruppe
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : Modify, Synchronize
AccessControlType : Allow
IdentityReference : Domain\Benutzer
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

Wie man sieht taucht die Gruppe 2 mal mit den identischen Berechtigungen auf. ich habe nun angefangen ein Script zu erstellen, welches aber nicht funktionieren will und ich erkenne den/die Fehler nicht:

Ausnahme beim Aufrufen von "RemoveAccessRule" mit 1 Argument(en):  "Der Wert darf nicht NULL sein.
Parametername: rule"
In D:\correct_doublepermissions.ps1:43 Zeichen:2+  $fileacl.RemoveAccessRule($saveacl)+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : ArgumentNullException

Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en):  "Der Wert darf nicht NULL sein.
Parametername: rule"
In D:\correct_doublepermissions.ps1:44 Zeichen:2+  $fileacl.AddAccessRule($saveacl)+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : ArgumentNullException

Das Argument "identity" mit dem Wert  "VORDEFINIERT\Administratoren" für "SetOwner" kann nicht in den Typ"System.Security.Principal.IdentityReference" konvertiert werden: "Der Wert "VORDEFINIERT\Administratoren" vom Typ"System.String" kann nicht in den Typ "System.Security.Principal.IdentityReference" konvertiert werden."
In D:\correct_doublepermissions.ps1:49 Zeichen:2+  $fileacl.SetOwner($fileowner)+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodException+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

Kann mir jemand auf die Sprünge helfen?

Das Script sieht so aus:

$tmpowner = New-Object System.Security.Principal.NTAccount('VORDEFINIERT\Administratoren')

$files = Get-ChildItem -Recurse | where {$_.PSIsContainer -eq "True"} | foreach -Process {$_.Fullname}
foreach ($file in $files)
{

 #Neue ACL einlesen und nach doppelten Gruppen suchen
 
 $fileacl = get-acl $file
 $fileaccessgroups = $fileacl.access.IdentityReference
 $diff = $fileaccessgroups | select -Unique
 $doubleentries = compare-object -ReferenceObject $fileaccessgroups -DifferenceObject $diff
 if ($doubleentries)
 {
 
 foreach ($doubleentry in $doubleentries)
 {
 $doubleentry = $doubleentry.InputObject
 $doubleentry = $doubleentry.Value
 $doubleentry = $doubleentry.Replace("\","\\")

 #Doppelte Eintraege in ACL entfernen
 
 $saveacl = $fileacl.access | where {$_.IdentityReference -match "$doubleentry" -and $_.IsInherited -match "False"} | select -last 1
 if ($saveacl)
 {
   Temp Owner setzen damit Powershell die ACL aendern kann
 $fileacl = get-acl $file
 $fileowner = $fileacl.Owner
 #fileacl.SetOwner($tmpowner)
 #Set-Acl -AclObject $fileacl -Path $file
 $null =  $fileacl.RemoveAccessRule($saveacl)
 $fileacl.AddAccessRule($saveacl)
 Set-Acl -AclObject $fileacl -Path $file
 #Urspruenglichen Owner wieder setzen
 $fileacl = get-acl $file
 $fileacl.SetOwner($fileowner)
 Set-Acl -AclObject $fileacl -Path $file
 } 
 }
 }
}

Vielen Dank im Voraus und ein schönes Wochenende

Frank


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>