PowerShell:查找哪些组附加到哪个文件夹

(这是我的第一篇文章,很抱歉,如果我很难理解或问一个坏的问题)

这是我的问题:

我有几个AD组具有相似的命名约定。 “* s​​omename”,我使用Get-ADGroup命令来获得一个数组填充这些对象。

同样,我有他们的NTFS权限的文件夹,我在另一个数组中。 这些权限是我前面提到的组,以及其他组和个人用户根据需要的组合。

最终目标(我想找什么):

  • 哪些文件夹没有分配任何AD组。
  • 哪些AD组没有附加到任何文件夹。
  • 哪个文件夹将哪个AD组分配给它。

这是我所尝试过的

$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结尾的匹配我无法与海誓山盟匹配

  • 在foreach结尾的匹配,我不能得到它匹配时正确的评价。 部分是因为其中一个领域附加在前面,另一个没有(因此“域”部分)
  • 当它位于foreach循环中时,我无法select目录path,

如果没有类似的环境来运行它,很难看到你得到的错误。 我可以提出以下两点build议。

1)Get-Childitem不返回任何具有“path”属性的项目。 尝试使用“全名”属性来代替。

2)当你尝试匹配一个包含执行特殊正则expression式函数的字符的string(比如\ $ ^ ?.)时,你需要将它们转义出来以便匹配。 反斜杠是正则expression式中的主要转义字符。

 $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

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