(Это мой первый пост, извините, если меня сложно понять или я задала плохой вопрос)
У меня есть несколько групп 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))