Назад | Перейти на главную страницу

PowerShell: поиск, какие группы к каким папкам прикреплены

(Это мой первый пост, извините, если меня сложно понять или я задала плохой вопрос)

Вот моя проблема:

У меня есть несколько групп AD с аналогичным соглашением об именах. «* somename», и я использовал команду Get-ADGroup, чтобы получить массив, заполненный этими объектами.

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

Конечная цель (что я хотел бы найти):

Вот что я пробовал

$CS_Dirs=get-childitem '\\my.server\share$\Dept' -recurse -depth 1 -filter copierscans
$CS_Roles=Get-ADGroup -filter {Name -like "* CopierScans"}

####For each directory in $CS_Dirs array, get acl###
foreach($dir in $CS_Dirs){

    ###Get the ACL for the Dir###
    get-acl $dir.PSPath | %{

        ####Variable to tell this loop if next loops find a match###
        $contains=$false

        ####For every access object in that ACL###
        foreach ($access in $_.access){

            ###loop through each group to check if any of the dir's ACL's principals are in my list of AD Groups.
            foreach($group in $CS_ADGrups){

                #If they are then set contains to true to tell the outer loop to select that path
                if($access.identityreference.ToString() -match {"DOMAIN\"+$group.name.ToString()}){
                    $contains=$true
                }
            }
        }

        #Should be a list of all the paths
        #Which are not assigned a group contained in my $CS_ADGroups list.
        if($contains){
            $_ | select @{n="path";e={$_.path}}
        }
    }
}

Проблемы:

Сопоставление в конце цикла foreach, которое я не могу сопоставить друг с другом

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

1) Get-Childitem не возвращает элементы со свойством "путь". Попробуйте вместо этого использовать свойство "Fullname".

2) Когда вы пытаетесь сопоставить строку, содержащую символы, которые выполняют специальные функции регулярных выражений (например, \ $ ^ ?.), вам нужно избежать их, чтобы они могли быть сопоставлены. Обратная косая черта - это основной escape-символ в регулярных выражениях.

$group = "DOMAIN\Some Group"
$group -match $group
False
$group -match [regex]::Escape($group)
True

[Regex]::Escape("DOMAIN\Some Group")
DOMAIN\\Some\ Group
help about_regular_expressions

Попробуйте следующее с правой стороны вашего -match

-match ( [regex]::Escape("Domain\" + $group.name))