Jump to content

Berechtigungs(Miss)Konfiguration Anzeigen Powershell


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Grüß euch,

Nachdem die Dokumentation meiner Vorgänger etwas zu Wünschen übrig gelassen hat, und ich bemerkt habe, dass teilweise auf Zuruf Berechtigungen auf Dateiebene (oder dem 25ten Unterordner) erstellt wurden, würde ich mir gerne anzeigen lassen, welche Berechtigungen welcher Ordner/Datei hat.

 

Angefangen habe ich hiermit.

$DirPath = "\\Server\d$\shares\share"
$DirInfo = New-Object System.IO.DirectoryInfo($DirPath)
$DirSec= Get-ACL $DirPath 

$headline= "{0,-50} {1,-90} {2,-10} " -f `
   "`nIdentität","Berechtigungen","Vererbt"
   
Write-Host -BackgroundColor Yellow -ForegroundColor Red"$DirPath"
Write-Host -BackgroundColor Yellow -foregroundcolor Red "$headline`n"

$ACL=$DirSec.Access
$ACL=$ACL | sort
$ACL | foreach{
   $Identity=$_.IdentityReference
   $FileSystemRights=$_.FileSystemRights
   $IsInherited=$_.IsInherited
   
   "{0,-50} {1,-90} {2,-10}" -f `
        $Identity,$FileSystemRights,$IsInherited   
}

Isinherit möchte ich mir anzeigen lassen, um es später herauszufiltern, und mir nur noch die Dateien und Ordner anzeigen zu lassen, die nicht-vererbte Berechtigungen aufweisen.

 

2 Punkte behindern mich derweilen noch.

 

1.) Möchte ich auch Unterordner überprüfen (ich habe an foreach gedacht, da get-childitem keine Pfade zurückgibt hänge ich)

2.) oben beschriebenes Filtern sollte doch möglich sein - meinereiner weiß jedoch nicht wie ;)

 

Hat jemand dazu ideen?

 

Link zu diesem Kommentar

1.) Möchte ich auch Unterordner überprüfen (ich habe an foreach gedacht, da get-childitem keine Pfade zurückgibt hänge ich)

2.) oben beschriebenes Filtern sollte doch möglich sein - meinereiner weiß jedoch nicht wie ;)

 

Hi,

Zu 1) Man kann gci auch dazu überreden, die Pfade auszuspucken

 

 

$Path= "c:\temp"
Get-ChildItem $path -Recurse | foreach{
 If($_.PSIsContainer -eq $True){
   $_.fullname
   #$_.PsParentPath
   #$_.PschildName
   }
 }

 

 

Ab PS3 kannst du den if-Block weglassen, und get-childitem den Positionsparameter -Directory mitgeben

 

zu 2.)

IsInherited hat entweder $true oder $false. Auf diese Werte kannst du doch filtern

 

$a=4 -le 2
$a
if($a -eq $false){
   "Falsch"
   }else{
   "Richtig"
   }
Link zu diesem Kommentar

Hi Blub,

danke für die Hilfe

 

Punkt 1

danke,hat super funktioniert - habs etwas abgeändert, da mich auch Berechtigungen auf Dateien direkt interessieren, die abgeändert wurden

Zu Punkt 2

Man sieht den Wald vor lauter Bäumen nicht ;) Danke

 

 

Um anderen eventuell etwas Arbeit abzunehmen

vorerst lauffähiges Script - falls es jemand benötigt

$Path= Read-Host "Bitte FQDN des gewünschten Zielordners eingeben.(\\Server\freigabe)"
Get-ChildItem $Path -Recurse | foreach{
   $Childpath= $_.fullname
   $ChildPath | foreach{
        $PathInfo = New-Object System.IO.DirectoryInfo($ChildPath)
        $PathSec= Get-ACL $ChildPath
        $ACL=$PathSec.Access
        $ACL=$ACL | sort
            $ACL | foreach{
            $Identity=$_.IdentityReference
            $FileSystemRights=$_.FileSystemRights
            $IsInherited=$_.IsInherited
                if ($IsInherited -eq $false)
                {
                $headline= "{0,-50} {1,-90} {2,-10} " -f `
                "Identität","Berechtigungen","Vererbt"
                Write-Host -BackgroundColor red -foregroundcolor green "$Childpath"
                Write-Host -BackgroundColor red -foregroundcolor green "$headline"
                "{0,-50} {1,-90} {2,-10}`n`n" -f `
                $Identity,$FileSystemRights,$IsInherited
                }
                    else
                    {
                    }
            
        }
    }
}

 

Die Ausgabe sieht zum Beispiel so aus

\\Server\Freigabe\Datei.zip
Identität                              Berechtigungen                                                                 Vererbt    
Domäne\User123                         FullControl                                                                    False     


\\Server\Freigabe\Ordner
Identität                              Berechtigungen                                                                 Vererbt    
Domäne\123User                         FullControl                                                                    False     

Ich hätte das gerne in einer Datei.

Wenn ich jedoch das ganze Script pipe, dann hab ich die oben beschriebenen Write-host und somit die Headlines und die Zuordnungen nicht in der Datei drinnen.

gibt es dafür auch noch so einen netten Wink? :)

lg

Stefan

Link zu diesem Kommentar

Ich habe dein Skript etwas angepasst. Als Datenstruktur benutze ich eine Datatable, damit kannst du die Ausgabe jenach Wunsch an Format-Table oder export-csv übergeben

 

 

Set-StrictMode -Version "2.0"
Clear-Host
$Path= # Read-Host "Bitte FQDN des gewünschten Zielordners eingeben.(\\Server\freigabe)"

#DataTable anlegen
$Properties = @("Ordnername","Identitaet","Berechtigungen","Vererbt")
$DataTable=New-Object System.Data.DataTable("FileACL")
$Properties | foreach {
  $Column = New-Object System.Data.DataColumn($_)
  $DataTable.Columns.Add($Column)
 }

#DataTable befüllen
Get-ChildItem $Path -Recurse | foreach{
   $FolderName = $_.Name
   
   $ACLs= @((Get-ACL $_.FullName).Access) | sort
   $ACLs | foreach{
      $Identity=$_.IdentityReference
      $FileSystemRights=$_.FileSystemRights
      $IsInherited=$_.IsInherited
      $DataTable.Rows.Add($FolderName,$Identity,$FileSystemRights,$IsInherited) | Out-Null
    }
             
}
#Datatable Filtern
$Filter = "(Vererbt like 'False')"
$FilteredDataTable = $DataTable.Select($Filter,$null)

#DataTable ausgeben
$FilteredDataTable | Format-Table OrdnerName,Identitaet,Berechtigungen,Vererbt -auto      #Host
$FilteredDataTable | Export-Csv "c:\temp\ausgabe1.csv" -Delimiter ";" #File
$FilteredDataTable | select Ordnername,Vererbt | Export-Csv "c:\temp\ausgabe2.csv" -Delimiter ";" #File
 
Link zu diesem Kommentar

Hallo,

 

ich habe gerade an einen Windows Server 2008 das Script ausprobiert. Leider ohne Erfolg.

 

Das Script fragt nicht welche Freigabe er dokumentieren soll.

Die Ausgabe Dateien werden angelegt, doch sind sie leer.

 

Es erscheint folgender Fehler (4 *"Ordnername","Identitaet","Berechtigungen","Vererbt"):

 

Get-ChildItem : Der Pfad "C:\temp\Ordnername" kann nicht gefunden werden, da er nicht vorhanden ist.
Bei C:\temp\ntfs.ps1:14 Zeichen:14
+ Get-ChildItem <<<<  $Path -Recurse | foreach{
    + CategoryInfo          : ObjectNotFound: (C:\temp\Ordnername:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

 

Muss das Script mit einen Parameter gestartet werden?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...