Get-ACL PowerShell со значениями SamAccountName - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь собрать разрешения для папок в CSV-файл с Powershell. Моя проблема в том, что мне нужно, чтобы результаты содержали как SamAccountName, так и FileSystemRights.

Я пробовал два разных метода. Сначала я предложил простой подход, который дал мне IdentityReference и FileSystemRights, но я не смог найти ни одного рабочего метода, который мог бы получить SamAccountName от IdentityReference. Второй, который я нашел в Интернете, был намного более сложным. Он собирает все учетные записи, которые имеют доступ к папке, но не показывает FileSystemRights, и я не мог понять, как изменить его, чтобы сделать это.

Мое собственное решение

(Get-Acl "FolderPath").Access | Select-Object IdentityReference, FileSystemRights

Решение, которое я нашел

Get-Acl $UncPath | Select-Object -ExpandProperty Access | Where-Object { (-not $_.IsInherited) -and ('NT AUTHORITY\SYSTEM','BUILTIN\Administrators','CREATOR OWNER' -notcontains $_.IdentityReference) } | Select-Object -ExpandProperty IdentityReference | ForEach-Object { $_.Translate('System.Security.Principal.SecurityIdentifier').Value } | Get-ADGroup -ErrorAction SilentlyContinue | get-adgroupmember | select-object SamAccountName | Format-Table | Out-String

Есть ли какой-нибудь рабочий метод, который может дать мне результат, в котором я вижу SamAccountName и FileSystemRights?

Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2019
$UncPath = 'E:\temp\test'

$all = Get-Acl $UncPath |
            Select -ExpandProperty Access |
            Where-Object { (-not $_.IsInherited) -and ('NT AUTHORITY\SYSTEM','BUILTIN\Administrators','CREATOR OWNER' -notcontains $_.IdentityReference) } |
            Select-Object @{ Name = 'Identity'; Expression = { $_.IdentityReference -replace "\w+\\(.+)", '$1' } }, FileSystemRights

# Here you can get Users ACL
$distinct_users = $all | 
            Select-Object Identity, @{ Name = 'sAMAccountName'; Expression = { (Get-ADUser -Identity $_.Identity -ErrorAction SilentlyContinue).sAMAccountName }}, FileSystemRights |
            Where-Object sAMAccountName -ne $null
# Here we will expand group acls
 $groups = $all | 
            Select-Object Identity, @{ Name = 'sAMAccountName'; Expression = { (Get-ADGroup -Identity $_.Identity -ErrorAction SilentlyContinue).sAMAccountName }}, FileSystemRights |
            Where-Object sAMAccountName -ne $null            
# now we will get groups memebership
$group_users = @()
Foreach($group in $groups){
    Get-ADGroupMember -Identity $group.Identity | ForEach-Object { $group_users += [PSCustomObject]@{ 
                                                                                        'Identity' = $group.Identity
                                                                                        'sAMAccountName' = $_.sAMAccountName
                                                                                        'FileSystemRights' = $group.FileSystemRights
                                                                                    } }

}

$everyone = $distinct_users + $group_users
$everyone | Export-Csv -Path D:\example.csv

Проверьте переменную $ each, она будет содержать 3 столбца: идентификатор, как это было в ACL, sAMAccountName и FileSystem Rights.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...