PowerShell получить разрешения для папки для пользователя с группой - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно распечатать разрешения пользователя для определенной папки.Ниже у меня есть рабочий код.Однако сканирование выполняется только в том случае, если пользователю были специально предоставлены разрешения.Теперь я также хочу проверить, есть ли у группы права доступа к папке.

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

$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}}
#    @{name="User" ;       expression={$User}}
) 
# 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))
        }
    }   
}

$List | Out-File C:\Users\cbruehwiler\Desktop\PermissionCheck.txt

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

1 Ответ

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

Я нашел решение.

Import-Module ActiveDirectory

$User = "Testumgebung\cbruehwiler"
$UserOhneDomain = "cbruehwiler"
$Path = "T:\"
$List = New-Object System.Collections.Generic.List[System.Object]
$Groups = Get-ADPrincipalGroupMembership $UserOhneDomain 

$GroupArrayList = New-Object System.Collections.ArrayList
foreach ($Group in $Groups)
{
$GroupArrayList.Add($Group.Name) | Out-Null
} 

# 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}}
#    @{name="User" ;       expression={$User}}
) 
$FileSystemObjects = Get-ChildItem $Path -Recurse | ForEach-Object {Get-Acl $_.FullName}

foreach ($Item in $FileSystemObjects) {
    foreach ($Right in $Item.Access) {
        if ($Right.IdentityReference -eq $User)
        {
            $List.Add(($Item | Select-Object $OutputFields))
        }
    }   
}


foreach ($Item in $FileSystemObjects) {
    foreach ($Right in $Item.Access) {
        foreach ($GroupArrayItem in $GroupArrayList){
            if ($Right.IdentityReference -eq ("TESTUMGEBUNG\" + $GroupArrayItem)) 
            {
                $List.Add(($Item | Select-Object $OutputFields))
            }
        }
    }   
}

$List | Out-File C:\Users\cbruehwiler\Desktop\PermissionCheck.txt

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

Вам просто нужно ввести пользователя один раз с вариантом "DOMAIN \ username" и один раз с вариантом "username".

Надеюсь, это поможет

...