Hier zeige ich anhand einer konkreten Problemstellung, wie man Dateirechte auf Dateisystemebene mit der Powershell anpasst.

In dem Beispiel geht es um ein korruptes Benutzerprofil, bei dem dem Benutzer nicht alle Datein in seinem Profil gehören. Deshalb wird der Benutzer ständig mit einem temporären Profil angemeldet. Das liegt daran, dass der Profildienst die Datei im Kontext des Benutzers nicht finden kann, um sie auf den lokalen Client zu kopieren. Die Dateirechte werden in dem Beispiel mit Get-Acl von einer Datei ausgelesen, bei der die Berechtigung bereits passt. Diese Berechtigungen werden dann für alle Dateien vergeben, bei denen der Benutzer nicht der Besitzer der Datei oder des Ordners ist.

$startFolder = "D:\Terminal\Profiles\benutzer.V2"
$ACL = get-acl "D:\Terminal\Profiles\benutzer.V2\AppData\Roaming\Microsoft\Internet Explorer\UserData\07IS3N4V\pmocntr2CAMQ8DP1.xml"
$expectedOwner = "Domain\User"

$arr = @()
gci $startFolder -recurse -force | % {

    if (((Get-ACL $_.FullName).Owner) -ne $expectedOwner ) {
        write-host "$($_.FullName)"
        set-acl -Path $_.FullName -AclObject $acl
        return
    }

    $obj = New-Object PSObject
    $obj | Add-Member NoteProperty Directory $_.DirectoryName
    $obj | Add-Member NoteProperty Name $_.Name
    $obj | Add-Member NoteProperty Length $_.Length
    $obj | Add-Member NoteProperty Owner ((Get-ACL $_.FullName).Owner)
    $arr += $obj
}
$arr | Export-CSV -Delimiter ";" -Path "ownage-report.csv" -NoTypeInformation -encoding "UTF8"