Powershell -比如,子数组中的-匹配
我正在使用Powershell -比如,子数组中的-匹配,powershell,active-directory,operators,contains,group-membership,Powershell,Active Directory,Operators,Contains,Group Membership,我正在使用Search ADAccount从Active Directory获取非活动用户列表,然后将其传送到Get ADUser,这样我就可以在MemberOf不包含组“Accounts\u to\u Keep”的地方使用。我相信我已经使用了正确的数字(379)和完整的DN字符串。但是,如果组移动,我想使用-match或-like来使用组名。它返回的数字不相同 如果我使用MemberOf对单个用户单独执行此操作,它只会过滤掉一个组,并返回用户拥有的另一个组,因此我认为这就是为什么我的-包含的。
Search ADAccount
从Active Directory获取非活动用户列表,然后将其传送到Get ADUser
,这样我就可以在MemberOf
不包含组“Accounts\u to\u Keep”
的地方使用。我相信我已经使用了正确的数字(379
)和完整的DN字符串。但是,如果组移动,我想使用-match
或-like
来使用组名。它返回的数字不相同
如果我使用MemberOf
对单个用户单独执行此操作,它只会过滤掉一个组,并返回用户拥有的另一个组,因此我认为这就是为什么我的-包含的
。有没有一种方法可以对子阵列使用-like
或-match
,而不用foreach
自己对其进行匹配
已从字符串中删除完整DN
PS>$InactiveAll.Count
488
PS>($InactiveAll |其中{-not$\.memberof.contains(“CN=Accounts\u to\u Keep,OU=DC”)))计数
379
PS>($InactiveAll |其中{$\.memberof-notlike“*Accounts\u To_keep*”).Count
427
PS>($InactiveAll |其中{-not$\.memberof-contains(“CN=Accounts\u to\u Keep,OU=DC”))
61
PS>($InactiveAll |其中{-not($\.memberof-contains(“CN=Accounts\u to\u Keep,OU=DC”))))计数
379
PS>($InactiveAll |其中{$\.memberof-notmatch“Accounts_To_Keep”})。计数
427
-like和-notlike使用通配符,“*”
。此外,在组数组上使用-notlike和-notmatch与在单个元素上使用它们的结果不同。我想你需要研究一下这些操作员的工作。任何结果都将在where对象中计算为“true”
'group1','group2','group3' -notmatch 'group1'
group2
group3
'group1','group2','group3' -notlike '*group1*'
group2
group3
以下是一种在字符串数组中搜索子字符串的方法:
| where { -not ($_.memberof | select-string group1) }
或
-like和-notlike使用通配符,
“*”
。此外,在组数组上使用-notlike和-notmatch与在单个元素上使用它们的结果不同。我想你需要研究一下这些操作员的工作。任何结果都将在where对象中计算为“true”
'group1','group2','group3' -notmatch 'group1'
group2
group3
'group1','group2','group3' -notlike '*group1*'
group2
group3
以下是一种在字符串数组中搜索子字符串的方法:
| where { -not ($_.memberof | select-string group1) }
或
我不认为
-match
在测试可分辨名称方面比-like
有任何优势,因为在这种情况下,'CN=Accounts\u to\u Keep'
将按名称识别所需的组。不要忘记,-notcontains
的存在是为了简化代码
这段代码可能有点不对劲,因为我前面没有一个目录可供测试,但如果您想将该组的成员排除在任何可能存在的位置,我认为您应该让Active directory处理查找该组的操作
$groupToExclude=Get ADGroup-Identity“Accounts\u to\u Keep”
…然后,您可以将可分辨名称作为一个整体进行匹配,而不是匹配可分辨名称子字符串
($InactiveAll |其中{$\.MemberOf-notcontains$groupToExclude.discrimitedName})。计数
这假设域中只有一个名为
Accounts\u的组要保留。如果不能保证这一点,您可以将该组的objectGUID
或objectSid
传递给获取ADGroup
,以无歧义地检索该确切的组。我不认为-match
在测试区分名称方面比-like
有任何优势,因为在这种情况下,您知道,'CN=Accounts\u to\u Keep'
将按名称标识所需的组。不要忘记,-notcontains
的存在是为了简化代码
这段代码可能有点不对劲,因为我前面没有一个目录可供测试,但如果您想将该组的成员排除在任何可能存在的位置,我认为您应该让Active directory处理查找该组的操作
$groupToExclude=Get ADGroup-Identity“Accounts\u to\u Keep”
…然后,您可以将可分辨名称作为一个整体进行匹配,而不是匹配可分辨名称子字符串
($InactiveAll |其中{$\.MemberOf-notcontains$groupToExclude.discrimitedName})。计数
这假设域中只有一个名为Accounts\u的组要保留。如果不能保证这一点,您可以将该组的objectGUID
或objectSid
传递给Get-ADGroup
,而不是它的名称,以无歧义地检索该组。首先从AD获取该组很好,我只是不想硬编码。这解决了这两个问题。谢谢。这是一个很好的观点,首先从广告中抓取这群人。我只是不想硬编码。这解决了这两个问题。非常感谢。