Получить ACL папки для конкретного пользователя - PullRequest
1 голос
/ 17 апреля 2019

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

Однако, это не возвращает никакого значения командой Write-Output. Изменение его на Write-Host также не сработало. Я скучаю по некоторым важным частям?

$user = "testumgebung\cbruehwiler"
$path = "T:\"
$list = Get-ChildItem $path -Recurse | Where-Object {(Get-Acl $_.FullName).Access | Where-Object {$_.IdentityReference -eq $user} }
Write-Output $list

Это возвращает список с папками, к которым у меня есть доступ. Но было бы лучше, если бы я мог получить список со всеми папками, к которым у меня есть доступ, и список разрешений, которые у меня есть (чтение, запись, выполнение, полный контроль).

Это образец списка:

Каталог: T: \

Режим: d ----

LastWriteTime: 17.04.2019 08: 25

Имя: TestFolder

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вот еще одна альтернатива.Это сохранит полный вывод в списке, который может быть экспортирован в CSV или аналогичный, если требуется.

$User = "testumgebung\cbruehwiler"
$Path = "T:\"
# Generic list object to store output in
$List = New-Object System.Collections.Generic.List[System.Object]

# Fields we want in list, an array of calculated properties.
$OutputFields = @(
    @{name="Item" ;       expression={$_.Path.split(':',3)[-1]}}
    @{name="Rights" ;     expression={$Right.FileSystemRights}}
    @{name="AccessType" ; expression={$Right.AccessControlType}}
) 
# Store all objects in variable
$FileSystemObjects = Get-ChildItem $Path -Recurse | ForEach-Object {Get-Acl $_.FullName}

# Iterate through every object
foreach ($Item in $FileSystemObjects) {
    # Iterate through every individual user right within each object
    # Add it to our list if it matchers our $User
    foreach ($Right in $Item.Access) {
        if ($Right.IdentityReference -eq $User) {
            $List.Add(($Item | Select-Object $OutputFields))
        }
    }   
}
# Output our list to screen.
$List
0 голосов
/ 17 апреля 2019

Примерно так получится нужная вам информация, например, папка, пользователь и разрешение. Затем вы можете создать желаемый вывод, например, CSV-файл, пользовательский объект или все, что вам нужно.

$user = "testumgebung\cbruehwiler"
$path = "T:\"
$folders = Get-ChildItem $path -Recurse
foreach ($folder in $folders)
{
    $acl = (Get-Acl $folder.FullName).Access | Where-Object { $_.IdentityReference -eq $user }
    # Folder name
    $folder.FullName
    # User/group name
    $acl.IdentityReference
    # Folder permissions
    $acl.FileSystemRights
}

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

...