PowerShell Удаление разрешения папки для удаленных учетных записей пользователей AD - PullRequest
0 голосов
/ 03 марта 2020

После удаления пользователя в AD его имя меняется на SX-XX-XXX

У меня есть сценарий для извлечения всех папок, для которых у SX-XX-XXX есть разрешения, что я пытаюсь сделать сделать, это взять этот список папок и удалить все SX-XX-XXX.

Код

<# The S-* is to represent the User ID that I am wanting to remove their folder permissions #>
$TargetUser = "S-*"
$TargetPath = "C:\Depts"

$Paths = get-childitem -path $TargetPath -Recurse -Directory
$FolderList = $Paths.FullName

ForEach ($Folder in $FolderList) {
    $ACL = Get-Acl -Path $Folder
    $ACLlist = $ACL.Access | where {$_.IdentityReference -like "*mike*"} 
    $RemoveUser = $ACLlist.IdentityReference

    if ($ACLlist.IdentityReference -like "$TargetUser") {
        Write-Host $Folder
        Write-Host $RemoveUser
        $ACE = New-Object System.Security.Accesscontrol.FileSystemAccessRule($RemoveUser, "None", "ContainerInherit,ObjectInherit", "InheritOnly", "Deny")
        $ACL.AddAccessRule($ACE)
        Set-Acl -Path $Folder -AclObject $ACL
    }
}

Я нашел код о том, как установить разрешение для папки из других разрешений папок, однако это пользователи, которые не были добавлены через наследование.

Я знаю, что упускаю что-то простое, поэтому любая помощь будет отличной.

Разрешения для папок

Большое спасибо всем, кто ответил, я ценю, что вы, ребята, нашли время, чтобы помочь.

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Ответ на проблему ниже.

Clear
$TargetUser = Read-Host -Prompt "Enter the target account you are targeting [Full or Parital works]"
$RootPath = Read-Host -Prompt "Enter the root folder to start looking in and removing permissions"

$SubPaths = Get-ChildItem -Path $RootPath -Recurse -Directory
$SubFolderList = $SubPaths.FullName
$rootdone = $false
$FolderPurgeList = @()

if ($rootdone -eq $false) {
        $ACL = Get-Acl -Path $RootPath
        $ACLlist = $ACL.Access | where {$_.IdentityReference -like "*$TargetUser*"} 
        $RemoveUser = $ACLlist.IdentityReference

        $count = $RemoveUser.count 
            ForEach ($UserName in $RemoveUser ) {
                $UserID = New-Object System.Security.Principal.Ntaccount ($UserName)
                $ACL.PurgeAccessRules($UserID)
                $ACL | Set-Acl $RootPath

                $itemHasPerm = New-Object –TypeName PSObject
                    $itemHasPerm | Add-Member –MemberType NoteProperty –Name "Target User" -Value $UserName
                    $itemHasPerm | Add-Member –MemberType NoteProperty –Name "Folder Path" -Value $RootPath

                $FolderPurgeList += $itemHasPerm
                $count -= 1
        }
    if ($count -eq 0 ) {
    $rootdone = $true
    }
}

if ($rootdone -eq $true) {
    ForEach ($SubFolder in $SubFolderList) {
        $ACL = Get-Acl -Path $SubFolder
        $ACLlist = $ACL.Access | where {$_.IdentityReference -like "*$TargetUser*"} 
        $RemoveUser = $ACLlist.IdentityReference
            ForEach ($UserName in $RemoveUser ) {
                $UserID = New-Object System.Security.Principal.Ntaccount ($UserName)
                $ACL.PurgeAccessRules($UserID)
                $ACL | Set-Acl $SubFolder

                $itemHasPerm = New-Object –TypeName PSObject
                    $itemHasPerm | Add-Member –MemberType NoteProperty –Name "Target User" -Value $UserName
                    $itemHasPerm | Add-Member –MemberType NoteProperty –Name "Folder Path" -Value $SubFolder

                $FolderPurgeList += $itemHasPerm
        }
    }
}

$FolderPurgeList
$DateStamp = Get-Date -Format "dd-MMM-yyyy - hh-ss"
$FolderPurgeList | Export-CSV $env:USERProfile\Documents\Purged_Permission_List_$DateStamp.csv
0 голосов
/ 03 марта 2020

Вы можете проверить, какой тип входа пользователя в acl, вам не нужен шаблон. И вы должны go для каждого правила доступа в каждой папке, чтобы проверить это, потому что removeaccesrule метод принимает только один объект во времени.

$DebugPreference = 'Continue'
$TargetPath = "D:\testdir"
$Paths = get-childitem -path $TargetPath -Recurse -Directory
$FolderList = $Paths.FullName

ForEach ($Folder in $FolderList) {
    $ACLs = Get-Acl -Path $Folder
    foreach($acl in $ACLs.Access){
        If (($acl.IdentityReference -is [System.Security.Principal.SecurityIdentifier]) -and (-not $acl.IsInherited)){
        Write-Debug ("Removing ACl for {0}`r`n" -f $acl.IdentityReference.Value)
        [Void]$ACLs.RemoveAccessRule($acl)
        }
    }
Write-Debug ("Setting ACL for {0}`r`n" -f $folder.FullName)
Set-Acl -path $folder -aclObject $ACLs
}

У меня есть еще одно решение: Использовать модуль ntfsSecurity (управление папками и файлами руководство ) Список всех разрешений, которые больше не могут быть разрешены , Обычно это происходит, если учетная запись больше недоступна, поэтому разрешения отображаются как SID, а не как имя учетной записи.

Чтобы удалить все неразрешаемые или потерянные разрешения, вы можете использовать следующую строку. Но будьте очень осторожны с этим, поскольку, возможно, учетная запись не может быть разрешена из-за проблем с сетью.

Install-Module -Name NTFSSecurity
dir -Recurse | Get-NTFSOrphanedAccess | Remove-NTFSAccess
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...