PowerShell Get-Acl - получить членов вместо группы - PullRequest
0 голосов
/ 03 сентября 2018

В PowerShell при использовании Get-Acl, как я могу показать всех участников, принадлежащих группе, а не самой группе?

Итак:

Get-ChildItem C:\ | where-object {($_.PsIsContainer)} | Get-Acl | select path -ExpandProperty Access

Показывает что-то вроде этого:

Path              : Microsoft.PowerShell.Core\FileSystem::C:\Test
FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

Path              : Microsoft.PowerShell.Core\FileSystem::C:\Test
FileSystemRights  : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

Вместо этого я хочу перечислить всех пользователей, принадлежащих администраторам / пользователям, с их разрешениями для каждой папки и удалить группу.

Также, как я могу добавить Convert-Path к оператору select path, чтобы отображаемый путь был только C: \ Test?

Спасибо!

1 Ответ

0 голосов
/ 11 сентября 2018

Я не смог решить эту проблему с помощью связанного поста и / или модуля управления доступом PowerShell, но у меня остались только группы. Таким образом, в итоге я смог получить необходимую информацию с помощью комбинации других полезных постов, таких как:

Скрипт PowerShell для возврата членов нескольких групп безопасности
Список пользовательских данных от имени пользователя

Расширяя свой первоначальный вопрос и включая конечный результат, который я хотел, я так и сделал. Это не красиво (даже повторяет небольшую часть кода), и большие части, вероятно, могут быть помещены в одну строку, но для моей собственной читабельности это вроде как имеет смысл. Также я пропустил удаление группы, так как нашел информацию полезной.

$queryPath = "C:\Test"
$targetFile = "C:\Test.csv"

$Table = @()

$Record = [ordered]@{
    "Path" = ""
    "IdentityReference" = ""
    "Class" = ""
    "GrpMember" = ""
}

$foldersToQuery = Get-ChildItem $queryPath | Where {$_.PSIsContainer} | select -expandproperty FullName

foreach ($folder in $foldersToQuery) {
    $Record.Path = $folder
    $permissions = Get-Acl $folder | select -expandproperty Access

    foreach ($permission in $permissions) {
        [string]$id = $permission.IdentityReference
        $SamAccountName = $id.Split('\')[1]
        $ADObject = Get-ADObject -Filter ('SamAccountName -eq "{0}"' -f $SamAccountName) }
        $Record.IdentityReference = $permission.IdentityReference.ToString()

        switch ($ADObject.ObjectClass) {
            'user' {
                $Record.Class = $ADObject.ObjectClass
                $Record.GrpMember = ""
                $objRecord = New-Object PSObject -property $Record
                $Table += $objrecord
            }
            'group' {
                $Record.Class = $ADObject.ObjectClass
                $members = Get-ADGroupMember $SamAccountName }

                foreach ($member in $members) {
                    $Record.GrpMember = $member.name
                    $objRecord = New-Object PSObject -property $Record
                    $Table += $objrecord
                }
            }
        }
    }
}
$Table | export-csv $targetFile -NoTypeInformation -Encoding UTF8

Возвращение такой таблицы при форматировании

...