当我执行以下代码时,出现以下错误:找不到与名称或匹配的参数。如何获取电子邮件地址中没有abc.com或xyz.com的用户列表?
Get-ADGroupMember -Identity "AQ" -Recursive | where objectClass -eq 'user' | Get-ADUser -Properties *, "msDS-UserPasswordExpiryTimeComputed", PasswordNeverExpires |
where mail -notmatch "@abc.com" -or "@xyz.com" |
Select-Object @{Label = "SAM Account Name";Expression = {$_.SamAccountName}}
答案 0 :(得分:4)
大括号(实际上是带有过滤器脚本的脚本块)不能总是用Where-Object
跳过。
您可以执行Where-Object objectClass -eq 'user'
,但涉及多个操作符的所有事情都必须编写为过滤器脚本:
where {$_.mail -notmatch "@abc.com" -or "@xyz.com" }
现在,此逻辑不起作用,因为它等效于以下语句:
where {($_.mail -notmatch "@abc.com") -or $true }
因此,无论-notmatch
操作的结果如何,您的where子句均为true。您需要两个-notmatch
操作:
Where-Object - { $_.Mail -notmatch '@abc.com' -and $_.Mail -notmatch '@xyz.com' }
根据要在过滤器脚本中排除的电子邮件地址的数量,您可能希望使用其他方法:从电子邮件地址中删除用户名,然后查看该地址是否出现在电子邮件数组中您要排除的地址。
Where-Object { ( $_.Mail -replace '^[^@]+') -notin '@abc.com','@xyz.com','@foo.bar' }
答案 1 :(得分:2)
对于多种情况,请使用完整语法:
where-object { $_.property -eq $b -and $_.otherproperty -match $a }
答案 2 :(得分:1)
您在where-clause
周围缺少括号:
where {objectClass -eq 'user'}
这:
where {mail -notmatch "@abc.com" -or "@xyz.com"}
应该像这样:
where {mail -notmatch "@abc.com" -or mail -notmatch "@xyz.com"}
请重新考虑您的秒数逻辑,因为它永远都是正确的。