我正在尝试使用下面的代码来获取不是InternetExplorer9组成员的计算机名列表。它运行没有错误,但它仍然给我计算机名称是InternetExplorer9的成员。知道我做错了什么吗?谢谢
Get-ADComputer -Property * -Filter * -Server DomainController -SearchBase "OU=City,OU=US,DC=Domain,DC=net" | where {$_.memberof -notmatch 'InternetExplorer9'} | FT Name, memberof
答案 0 :(得分:0)
试试这个:
Get-ADComputer -Property * -Filter * -Server DomainController -SearchBase "OU=City,OU=US,DC=Domain,DC=net" |
where {-not ($_.memberof -match 'InternetExplorer9')} | FT Name, memberof
-match和-notmatch,当用于数组时将返回满足测试的数组的所有元素,所以
$_.memberof -notmatch 'InternetExplorer9'
将返回与“InternetExplorer9”不匹配的所有组成员身份。当用作布尔测试时,如果存在任何不匹配的组,则表示它为真。
Where-Object将通过Where子句/ scriptblock运行当前管道对象,并将结果计算为Boolean(True / False)。假设您的MemeberOf集合中有3个组:
$groups = @('InternetExplorer9','SomeOtherGroup1','SomeOtherGroup2')
$groups -notmatch 'InternetExplorer9'
SomeOtherGroup1
SomeOtherGroup2
-notmatch
返回了与“InternetExplorer9”不匹配的所有群组成员资格。当它被评估为布尔值时,它将变为True,因为它找到了与“InternetExplorer9”不匹配的组,并且该对象将通过测试并继续沿着管道向下,即使它是'InternetExplorer9的成员'小组。它失败的唯一时间是它的所有组成员资格都匹配'InternetExplorer9',而-notmatch
什么都不返回。