Как узнать, какие разрешения есть у пользователей на ту или иную папку?

avatar
alaa
1 июля 2021 в 16:49
134
0
0

Я создал этот скрипт, который анализирует определенный каталог "xyz". У меня есть изолированные группы "NETZ", которые имеют доступ к этому каталогу и рекурсивно проходят через них и подсчитывают пользователей (уникальные, повторяющиеся записи удаляются). В конце я экспортировал все это со свойствами "samaccountname" и "name".

Итак, теперь у меня есть количество пользователей в группах "NETZ", которые имеют доступ к этому каталогу.


this is a shortcut
samaccountname       Name                     
--------------       ----                     
ADM-AD-Task          ADM-AD-Task              
adm-agayk            ADM-agayk                
ADM-akorn            ADM-akorn                
ADM-algoergen        ADM-algoergen            
ADM-bklann           ADM-bklann               
ADM-chhuebner        ADM-chhuebner            
adm-ckaehler         ADM-ckaehler             
ADM-daneumann        ADM-daneumann            
ADM-dhorn            ADM-dhorn                
ADM-dkrzyzostaniak   ADM-dkrzyzostaniak       
ADM-dmetz            ADM-dmetz  

this is the output of this variable $workersunique


Теперь, помимо свойств "samaccountname" и "name", я также хочу получить разрешения каждого пользователя. Например, если у пользователя есть права только на чтение или запись. «Какое разрешение имеет каждый пользователь в группах для этого каталога».

Вот мой скрипт

#get all groups of the directory

$GroupFolder = Get-NTFSAccess -Path "\\Vh01tools\xyz"

#remove the NOT NETZ groups

$GroupFolder = $GroupFolder -match "NETZ"

#go through the groups and add the users to a variable

for ($i=0; $i -lt $GroupFolder.length; $i++){
    Write-Host $GroupFolder[$i]
    $groupsarray = $GroupFolder[$i].Account.ToString()
    $groupname = $groupsarray -replace "NETZ\\", ""
    echo $groupname
    if($groupname -eq "S-PCAdmin") {
        echo "Do not add worker"
        } else {
                echo "add worker"
                $workers += Get-ADGroupMember $groupname -Recursive | select samaccountname, Name
                
            }
}


$wn = $workers.Count
echo "There is" $wn "workers."

$workerssorted = $workers | Sort-Object -Property samaccountname, name

$workersunique = $workerssorted | Select-Object -Property samaccountname, name -Unique

$accualworkers = $workersunique.Count
echo "there is" $accualworkers " workers."

# Here i tried to get the **permissions** from each user in the groups but it didn't work. It only gets me the access rights of the mentioned Account "ajenniat" as shown in the output.

Foreach ($m in $workersunique) {
    $ma = Get-NTFSEffectiveAccess -Path "\\Vh01tools\xyz" -Account ajenniat
    $ma
    }

вот что я получаю

PS G:\> C:\Users\yalhares\Desktop\fg.ps1
A 'NETZ\Domain Admins' (FullControl)
Domain Admins
add worker
A 'NETZ\S-ServEDA-VIS' (ReadAndExecute, Synchronize)
S-ServEDA-VIS
add worker
A 'NETZ\S-ServEDA-DIR' (Modify, Synchronize)
S-ServEDA-DIR

# The permissions of the three groups are displayed

add worker
There is
415
workers.
there is
83
workers.
WARNUNG: The user does not hold the Security Privliege and might not be able to read the effective permissions


    Path: \\Vh01tools\xyz (Inheritance disabled)


Account                             Access Rights                                   Applies to                Type                                            IsInherited                                     InheritedFrom                                  
-------                             -------------                                   ----------                ----                                            -----------                                     -------------                                  
NETZ\ajenniat                       FullControl                                     ThisFolderOnly            Allow                                           False                                                                                          
WARNUNG: The user does not hold the Security Privliege and might not be able to read the effective permissions
NETZ\ajenniat                       FullControl                                     ThisFolderOnly            Allow                                           False                                                                                          

Как видите, я могу получить права доступа только от указанного имени пользователя "ajenniat". мне все еще нужно получить разрешения для остальных 82 пользователей.

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

Заранее большое спасибо!????

Источник
Steezy
1 июля 2021 в 17:09
1

В вашем цикле одним из ваших аргументов является -Account ajenniat. Что происходит, когда вы пытаетесь -Account * ?

alaa
1 июля 2021 в 17:31
0

Привет, @Steezy, спасибо за быстрый ответ. Я пробовал это, но это не сработало. который возвращает: Get-NTFSEffectiveAccess : параметр «Учетная запись» не может быть привязан. Значение "*" нельзя преобразовать в тип "Security2.IdentityReference2". Ошибка: «Не удалось перевести некоторые или все ссылки на удостоверения».

Steezy
1 июля 2021 в 18:04
0

Хм, хорошо. Я должен буду изучить это больше. В качестве временной альтернативы вы можете использовать ICACLS для просмотра разрешений. Пример: icacls "C:\PutYourPathHere"

alaa
1 июля 2021 в 18:12
0

@Steezy Хорошо, я понял: PS G:\> icacls "\\Vh01tools\xyz" \\Vh01tools\xyz NETZ\Администраторы домена:(OI)(CI)(F) BUILTIN\Administratoren:(OI)(CI) (F) NETZ\S-ServEDA-DIR:(OI)(CI)(M) NETZ\S-ServEDA-VIS:(OI)(CI)(RX)

Steezy
1 июля 2021 в 18:20
0

Таковы права наследования. См. Документацию.

alaa
2 июля 2021 в 17:11
0

@Стизи, это не работает. Я также пытался его конвейеризировать, но все равно получаю только «имя» и «samaccountname». $MAsortedandunique = $mitabeidersorted | Select-Object -Property samaccountname, Name -Unique | Get-NTFSEffectiveAccess -Account $mitabeider | select Account, AccessControlType, AccessRights, FullName. Но это дает мне это: PS G:\> $MAsortedandunique samaccountname Name --------- ---- ADM-AD-Task ADM-AD-Task adm-agayk ADM-agayk ADM-akorn ADM-akorn

Ответы (0)