尝试使用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。
答案 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