从Powershell查询中排除txt通配符内容

时间:2014-09-11 19:43:50

标签: powershell

我很难获得此PowerShell脚本来排除test.txt文件的通配符内容。

非常感谢任何帮助。

谢谢!

Test.txt:

admin
exchange
root
Powershell:

$List = Get-Content C:\Test.txt
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName | ? {$_.FirstName -NotLike "*$List*" -AND $_.LastName -NotLike "*$List*" -AND $_.SamAccountName -NotLike "*$List*"}

更新

感谢大家为您提供的帮助。我针对以下查询进行了健全性检查,但我无法将-match和

-notmatch
等同于简单查询的结果。我在这里有不正确的期望,或者匹配/无匹配等于QAD吗?


当我使用

-notmatch
运行 @TheMadTechnician 查询然后运行
-match
时结果不等于没有Test.txt

$List = GC C:\test.txt
$Filter = "($(($List|ForEach{[RegEx]::Escape($_)}) -join "|"))"
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName | ? {$_.FirstName -notmatch $filter -AND $_.LastName -notmatch $filter -AND $_.SamAccountName -notmatch $filter}

然后运行

$List = GC C:\test.txt
$Filter = "($(($List|ForEach{[RegEx]::Escape($_)}) -join "|"))"
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName | ? {$_.FirstName -notmatch $filter -AND $_.LastName -notmatch $filter -AND $_.SamAccountName -notmatch $filter}

这两个组合不等于

的输出结果
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName

当我使用

-notmatch
运行 @mjolinor 查询然后运行
-match
时结果不等于没有Test.txt

$List = Get-Content C:\Test.txt
$Match = $list -join '|'
Get-QADUser -sizelimit 0 | 
Select SamAccountName, FirstName, LastName | 
? {($_.FirstName,$_.LastName,$_.SamAccountName -notmatch $Match).count -eq 3}

然后运行

$List = Get-Content C:\Test.txt
$Match = $list -join '|'
Get-QADUser -sizelimit 0 | 
Select SamAccountName, FirstName, LastName | 
? {($_.FirstName,$_.LastName,$_.SamAccountName -match $Match).count -eq 3}

这两个组合不等于

的输出结果
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName

很抱歉这个糟糕的格式化让我很难让代码没有正确格式化。

2 个答案:

答案 0 :(得分:2)

进行正则表达式匹配。获取内容,用管道将它们连接起来并用括号括起来,你就好了!看看:

$List = GC C:\test.txt
$Filter = "($(($List|ForEach{[RegEx]::Escape($_)}) -join "|"))"
Get-QADUser -sizelimit 0 | Select SamAccountName, FirstName, LastName | ? {$_.FirstName -notmatch $filter -AND $_.LastName -notmatch $filter -AND $_.SamAccountName -notmatch $filter}

这仍然匹配部分字符串,就像您-like *$list*尝试(和失败)一样。

答案 1 :(得分:1)

未经测试,但我认为这应该有效:

$List = Get-Content C:\Test.txt
$Match = $list -join '|'

Get-QADUser -sizelimit 0 | 
Select SamAccountName, FirstName, LastName | 
? {($_.FirstName,$_.LastName,$_.SamAccountName -notmatch $Match).count -eq 3}