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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 438938
Url: https://administrator.de/contentid/438938
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
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 Hi, da sehe ich nur, wer auf nen Ordner Berechtigung hat, oder? Ich meint, die Gruppe xyz hat Berechtigung auf folgende Ordner.
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):
Wenn geerbte Rechte nicht aufgelistet werden sollen den Switch -includeInheritedRights weglassen.
Oder das ganze für alle Shares auf allen Servern der Domain:
Passende Rechte auf alle Shares und WMI Access auf alle Server vorausgesetzt.
Grüße Uwe
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
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
Grüße Uwe