Get-Aduser -Filter选项 - 不适用不起作用

时间:2018-02-15 18:05:15

标签: powershell

尝试使用Get-Aduser在Active Directory中查找不在文本文件中的条目。 -like选项似乎有效,但似乎无法使-notlike生效。 当我使用-nolike选项时,文本文件中的条目将显示为输出文件的一部分。使用-like选项,powershell可以正常工作。

以下是文本文件的内容

svcXXSQL001Agent
svcXXSQL001DBEng
svcXXSQL001Int
svcXXSQLUAT501DBEng
svcxxapp211

这是我现有的代码:

$server=get-content C:\temp\test.txt
 foreach ($name in $server) {
 Get-ADUser -SearchBase “OU=ServiceAccts,DC=nlong,DC=com”  -Filter "name -notlike '$name'"  | sort | Where-Object {$_.Name -like "svcxxsql*"} | Select-    Object Name | Out-File -FilePath C:\temp\foo.txt
 }

感谢您的投入,Norm。

1 个答案:

答案 0 :(得分:0)

期望没有给定名称的输出是错误的假设,让我演示使用数字1和2,Where-Object cmdlet代替Get-ADUser过滤器所有数字从1到5 < em> {<1}}或1 除外:

2

您将找到输出:

$numbers = 1,2,3
foreach($number in $numbers){
    # Let's output all numbers from 1 to 3, except for $number
    1..3 |Where-Object {$_ -notlike $number}
}

在循环的第一次迭代中,我们收到数字2 3 1 3 1 2 以及数字2 - 这显然不是我们的意图,它们应该被过滤,但它最终在输出,因为我们一次只过滤1个数字。

我们可以使用3-notcontains运算符来过滤术语集合:

-notin

在您的示例中,您必须使用$numbers = 1,2,3 1..3 |Where-Object {$numbers -notcontains $_} # or 1..3 |Where-Object {$_ -notin $numbers} cmdlet检索所有AD用户并进行过滤:

Where-Object

由于您只对以Get-ADUser -SearchBase "OU=ServiceAccts,DC=nlong,DC=com" |Where-Object {$_.Name -notin $server} | sort | Where-Object {$_.Name -like "svcxxsql*"} | Select-Object Name | Out-File -FilePath C:\temp\foo.txt 开头的帐户感兴趣,我们不妨将其作为过滤器:

svcxxsql