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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 605006
Url: https://administrator.de/contentid/605006
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
9 Kommentare
Neuester Kommentar
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"