dasistdasende
Goto Top

Kostenloses Tool zum Auslesen Berechtigung

Hi. Gibt es ne Freeware, die mir sagen kann, welche Berechtigung auf welche Ordner ne Sicherheitsgruppe im AD hat? Sowas wie Tenfold in klein? face-smile

Content-Key: 438938

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

Printed on: April 23, 2024 at 18:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Apr 10, 2019 at 09:48:09 (UTC)
Goto Top
gci | get-acl
?
Mitglied: 139374
139374 Apr 10, 2019 updated at 09:53:37 (UTC)
Goto Top
Member: DasistdasEnde
DasistdasEnde Apr 10, 2019 at 09:57:52 (UTC)
Goto Top
Hi, da sehe ich nur, wer auf nen Ordner Berechtigung hat, oder? Ich meint, die Gruppe xyz hat Berechtigung auf folgende Ordner.
Mitglied: 139374
Solution 139374 Apr 10, 2019 updated at 10:01:41 (UTC)
Goto Top
Zitat von @DasistdasEnde:

Hi, da sehe ich nur, wer auf nen Ordner Berechtigung hat, oder? Ich meint, die Gruppe xyz hat Berechtigung auf folgende Ordner.
Einfach ein Where-Object hinterherwerfen und den gewünschten User ausfiltern face-smile
Member: mayho33
Solution mayho33 Apr 10, 2019 at 10:46:24 (UTC)
Goto Top
Eventuell damit in Powershell:

$DirectoryPath="\\server\pfad"
(Get-Acl $DirectoryPath).AccessToString | ft -a > dateiname.csv
Member: colinardo
Solution colinardo Apr 10, 2019, updated at May 24, 2022 at 17:02:43 (UTC)
Goto Top
Servus,
schnell zusammengescriptet, hier das ganze für eine angegebene Ordnerstruktur und eine Gruppe (geht auch für einen User indem man einfach den DN des Users angibt oder per Get-ADUser diese ermittelt):
function Get-FolderRightsForAccount([string]$dn, [string]$rootfolder, [switch]$includeInheritedRights){
    # get sids from all inherited groups
    $getsidsrecurse = {
        param($obj)
        $result += Get-ADPrincipalGroupMembership $obj | %{
            &$getsidsrecurse -obj $_.DistinguishedName
            $_.SID.Value
        }
        $result
    }
    # join sid of object and all inherited groups sid's 
    [array]$sids = [array](Get-ADObject $dn -Properties objectSid).objectSid.Value + 'S-1-1-0' + 'S-1-5-11' + (&$getsidsrecurse -obj $dn)  
    $inherited = @{$true=($true,$false);$false=$false}[$includeInheritedRights.IsPresent]
    (Get-ACL $rootfolder).Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$rootfolder}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    gci $rootfolder -Recurse -Directory -PipelineVariable f | %{
        (Get-ACL $_.Fullname).Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$f.Fullname}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
    }
}

Get-FolderRightsForAccount -dn (Get-ADGroup 'DEINEGRUPPE').DistinguishedName -rootfolder 'C:\TESTSHARE' -includeInheritedRights | ft -AutoSize  
Wenn geerbte Rechte nicht aufgelistet werden sollen den Switch -includeInheritedRights weglassen.

Oder das ganze für alle Shares auf allen Servern der Domain:
function Get-SharedFolderRightsForAccount([string]$dn, [switch]$includeInheritedRights){
    # get sids from all inherited groups
    $getsidsrecurse = {
        param($obj)
        $result += Get-ADPrincipalGroupMembership $obj | %{
            &$getsidsrecurse -obj $_.DistinguishedName
            $_.SID.Value
        }
        $result
    }
    # join sid of object and all inherited groups sid's 
    [array]$sids = [array](Get-ADObject $dn -Properties objectSid).objectSid.Value + 'S-1-1-0' + 'S-1-5-11' + (&$getsidsrecurse -obj $dn)  
    $inherited = @{$true=($true,$false);$false=$false}[$includeInheritedRights.IsPresent]

    $servers = Get-ADComputer -Filter {OperatingSystem -like '*Server*'} | select -Expand DNSHostName  
    foreach($server in $servers){
        $shares = gcim Win32_Share -Computername $server -PipelineVariable share | ?{$_.Status -eq 'OK' -and $_.Path -ne '' -and (Test-Path "\\$server\$($_.Name)" )}  
        foreach($share in $shares){
            $sharesec = gcim Win32_LogicalShareSecuritySetting -ComputerName $server | ?{$_.Name -eq $share.Name}
            if ($sharesec){
                if ((Compare -ReferenceObject (Invoke-CimMethod -InputObject $sharesec -MethodName GetSecurityDescriptor -EA Ignore).Descriptor.DACL.Trustee.SidString -DifferenceObject $sids -IncludeEqual -PassThru)){
                    (Get-ACL "\\$server\$($share.Name)").Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={"\\$server\$($share.Name)"}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
                    gci "\\$server\$($share.Name)" -Recurse -Directory -PipelineVariable f | %{  
                        (Get-ACL $_.Fullname).Access | ?{try{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -in $sids -and $_.IsInherited -in $inherited}catch{}} | select @{n='Folder';e={$f.Fullname}},AccessControlType,@{n='Rights';e={$_.FileSystemRights}}  
                    }
                }
            }
        }
    }
}

Get-SharedFolderRightsForAccount -dn (Get-ADGroup 'DEINEGRUPPE').DistinguishedName | ft -AutoSize  
Passende Rechte auf alle Shares und WMI Access auf alle Server vorausgesetzt.


Grüße Uwe