Powershellscript NTFS Berechtigungen - Gruppen aufschlüsseln
Hallo zusammen,
ich habe den Auftrag von unserer HR Abteilung bekommen alle NTFS Berechtigungen auf dem Laufwerk aufzuschlüsseln. Und zwar nach konkreten Personen.
Ich habe bereitsfolgendes Script in der Suche gefunden, war allerdings nicht in der Lage dieses entsprechend anzupassen, dass er mir die Gruppen auflöst.
Ich weiß, dass ich mit get-adgroupmember die Mitglieder rausbekomme, aber ich bin überfordert das passend in das vorhandene Script zu integrieren.
Genauso habe ich festgestellt, dass wir einige Ordner mit über 256 Zeichen haben, die das Script nicht verarbeiten konnte. In der Powershell sind die natürlich mit entsprechenden Fehlermeldungen angezeigt, aber kann ich die mit irgend einem Befehl noch in eine Datei schreiben, damit wir die Pfade entsprechend korrigieren können? Ich habe dazu zwar auch ein Script hier entdeckt, dass die Ordner Icons ändern, aber das wurde abgelehnt. Wir sollen die Abteilungen informieren, die betroffen sind.
Viele Grüße
ich habe den Auftrag von unserer HR Abteilung bekommen alle NTFS Berechtigungen auf dem Laufwerk aufzuschlüsseln. Und zwar nach konkreten Personen.
Ich habe bereitsfolgendes Script in der Suche gefunden, war allerdings nicht in der Lage dieses entsprechend anzupassen, dass er mir die Gruppen auflöst.
Ich weiß, dass ich mit get-adgroupmember die Mitglieder rausbekomme, aber ich bin überfordert das passend in das vorhandene Script zu integrieren.
Genauso habe ich festgestellt, dass wir einige Ordner mit über 256 Zeichen haben, die das Script nicht verarbeiten konnte. In der Powershell sind die natürlich mit entsprechenden Fehlermeldungen angezeigt, aber kann ich die mit irgend einem Befehl noch in eine Datei schreiben, damit wir die Pfade entsprechend korrigieren können? Ich habe dazu zwar auch ein Script hier entdeckt, dass die Ordner Icons ändern, aber das wurde abgelehnt. Wir sollen die Abteilungen informieren, die betroffen sind.
Viele Grüße
Please also mark the comments that contributed to the solution of the article
Content-Key: 605006
Url: https://administrator.de/contentid/605006
Printed on: April 24, 2024 at 08:04 o'clock
9 Comments
Latest comment
Falls du die Ordner etwas eingrenzen kannst, kannst du folgendes Skript probieren.
Es listet dir den gewählten Ordner inkl. aller Unterordner auf und gibt dir aus, wer was darf.
Ich betone noch mal....Je höher die Ordnerstruktur auf dem Fileserver, desto länger dauert es.
Es listet dir den gewählten Ordner inkl. aller Unterordner auf und gibt dir aus, wer was darf.
Ich betone noch mal....Je höher die Ordnerstruktur auf dem Fileserver, desto länger dauert es.
$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('MM-dd-yyyy')
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
$Ordnername.Description = "Ordner auswählen"
$Ordnername.rootfolder = "MyComputer"
if($Ordnername.ShowDialog() -eq "OK")
{
$Ordner += $Ordnername.SelectedPath
}
return $Ordner
}
$folder = Get-Folder
Write-Host
Write-Host
Write-Host "Berechtigungsstruktur wird gelesen"
Write-Host "Liste wird erstellt. Bitte warten..."
Get-ChildItem –Path $folder –Recurse -Directory | Get-NTFSAccess | ?{$_.Account.Sid -notin @('S-1-5-18','S-1-5-32-544')} | select Fullname,Account,AccessRights,InheritedFrom | export-csv -Path "$env:USERPROFILE\Desktop\Berechtigungsstruktur_$CurrentDate.csv" -NoType -Encoding UTF8 -Delimiter ";"
Ansonsten probiere folgendes.
Du startest das Skript, gibst den gewünschten Usernamen ein, wählst den gewünschten Oberordner (Auch hier, je höher gewählt desto länger läuft es!!!) und du erhältst im Anschluss alle Ordner, auf die der angegebene User Zugriff hat. Inkl. der Rechte die er auf den Ordner hat.
Du startest das Skript, gibst den gewünschten Usernamen ein, wählst den gewünschten Oberordner (Auch hier, je höher gewählt desto länger läuft es!!!) und du erhältst im Anschluss alle Ordner, auf die der angegebene User Zugriff hat. Inkl. der Rechte die er auf den Ordner hat.
$User = read-Host "Gebe User ein: "
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$Ordnername = New-Object System.Windows.Forms.FolderBrowserDialog
$Ordnername.Description = "Ordner auswählen"
$Ordnername.rootfolder = "MyComputer"
if($Ordnername.ShowDialog() -eq "OK")
{
$Ordner += $Ordnername.SelectedPath
}
return $Ordner
}
$o = Get-Folder
write-host
write-host "Das kann eine Weile dauern. Bitte warten..."
write-host
function Get-FolderRightsForAccount([string]$dn, [string]$rootfolder, [switch]$includeInheritedRights){
$sids = @()
$sids += (Get-ADObject $dn -Properties objectSid).objectSid.Value
$sids += Get-ADPrincipalGroupMembership $dn | select -Expand GroupName
$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-ADUser $User).DistinguishedName -rootfolder $o -includeInheritedRights | ft -AutoSize
write-host
read-host "Zum Beenden beliebige Taste druecken"