【问题标题】:PowerShell Not Member of GroupPowerShell 不是组成员
【发布时间】:2018-07-11 21:12:22
【问题描述】:

我正在查看Powershell - Get-ADComputer -properties memberof,但它对我不起作用。匹配总是返回真。所以我将在组列表中使用像域计算机这样简单的东西,-notmatch 应该过滤掉属于域计算机组的任何内容,它仍然返回属于域计算机的计算机。我想要的只是一个脚本,它可以获取计算机并根据组列表检查它们的成员资格,如果它们属于该组列表,则返回它们。

$groups = @("Terminal Server License Servers","Exchange Trusted Subsystem","Cert Publishers","Domain Computers")
$regex = '^({0})' -f ($groups -join '|')
get-adcomputer -Filter {OperatingSystem -like "Windows Server 200*"} -properties * | Where-Object{($_.MemberOf | Get-ADGroup).Name -notmatch $regex} | Select-Object Name | fl

【问题讨论】:

  • 您能否向我们展示您对所附代码的实现,以便我们更好地了解您正在尝试做什么?
  • 请发布您实际运行的代码,而不是指向另一个问题的链接。请编辑您的问题以提供此代码。请勿将其作为评论发布。
  • 这是链接问题中答案的确切代码(除了您删除了几个属性)。您没有进行任何更改以使其适合您?

标签: regex powershell filter


【解决方案1】:

你想要

Where-Object {-not (($_.MemberOf | Get-ADGroup).Name -match $regex) }

因为Y -notmatch X 并不意味着“没有与X 匹配的Y”,而是意味着“至少有一个Y 与X 不匹配”(正如Y -match X 并不意味着“所有Y 都匹配X” , 但“至少有一个 Y 匹配 X”)

你想要Y -match X的反义词,即-not (Y -match X)

试试

"a","3","#" -match "[a-z]"
"a","3","#" -notmatch "[a-z]"

看看-match-notmatch 实际做了什么。


通过聊天,我和 OP 找到了解决问题的更好方法,为方便起见,在此重复:

我们在这里比较两个列表 - ADComputer 和您的参考列表,以及您要消除的所有 至少有一个匹配,并显示其余的。

因此,对于每个计算机对象,对于它所属的每个组, 如果该组出现在您的参考列表中,请过滤掉计算机。

PowerShell 代码:

$referenceListOfGroups =
    "CN=group_1....",
    "CN=group_2....",
    "CN=group_N...."

Get-ADComputer -LDAPFilter "OperatingSystem=Windows Server 200*" -Properties MemberOf | Where-Object {
    ($_.MemberOf | Where-Object { $_ -in $referenceListOfGroups }).Count -eq 0
}

【讨论】:

  • 谢谢。即使进行了更改,它仍然无法正常工作。我认为这是因为在组名中有括号会导致匹配失败。有没有办法让它在字符串中忽略它? $groups = @("server - (number) Extra text")
  • 新问题 - 我让它忽略字符串中的正则表达式字符,但现在当我引入多个组进行检查时,它不起作用$groups = [regex]::escape(@("server - (1) Extra Text","server - (2) Extra Text"))
  • 我建议您使用 actual 组名和 -in 运算符而不是正则表达式的数组:-not (($_.MemberOf | Get-ADGroup).Name -in $groups)
  • 谢谢。试过了。仍然无法正常工作。当您说实际的组名时,我假设您是指组名,而不是完整的 CN 名称,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2016-10-26
相关资源
最近更新 更多