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-ID: 438938

Url: https://administrator.de/forum/kostenloses-tool-zum-auslesen-berechtigung-438938.html

Ausgedruckt am: 26.12.2024 um 12:12 Uhr

SlainteMhath
Lösung SlainteMhath 10.04.2019 um 11:48:09 Uhr
Goto Top
gci | get-acl
?
139374
139374 10.04.2019 aktualisiert um 11:53:37 Uhr
Goto Top
DasistdasEnde
DasistdasEnde 10.04.2019 um 11:57:52 Uhr
Goto Top
Hi, da sehe ich nur, wer auf nen Ordner Berechtigung hat, oder? Ich meint, die Gruppe xyz hat Berechtigung auf folgende Ordner.
139374
Lösung 139374 10.04.2019 aktualisiert um 12:01:41 Uhr
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
mayho33
Lösung mayho33 10.04.2019 um 12:46:24 Uhr
Goto Top
Eventuell damit in Powershell:

$DirectoryPath="\\server\pfad"
(Get-Acl $DirectoryPath).AccessToString | ft -a > dateiname.csv
colinardo
Lösung colinardo 10.04.2019, aktualisiert am 24.05.2022 um 19:02:43 Uhr
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