Using “-Filter” with a variable in PowerShell

2019-03-30 01:03发布

I try to filter out something like this:

Get-ADComputer -Filter {name -like "chalmw-dm*" -and Enabled -eq "true"} ...

This works like a charm and gets exactly what I want...

Now I want the "name -like ..." part as a variable like this:

Get-ADComputer -Filter {name -like '$nameregex' -and Enabled -eq "true"} |

I checked several questions (for example, PowerShell AD Module - Variables in Filter), but this isn't working for me.

I tried it with the following:

$nameRegex = "chalmw-dm*"
$nameRegex = "`"chalmw-dm*`""

And also in the Get-ADComputer command with those ' and without.

Could anyone give me some hints?

3条回答
▲ chillily
2楼-- · 2019-03-30 01:23

You don't need quotes around the variable, so simply change this:

Get-ADComputer -Filter {name -like '$nameregex' -and Enabled -eq "true"}

into this:

Get-ADComputer -Filter {name -like $nameregex -and Enabled -eq "true"}

Note, however, that the scriptblock notation for filter statements is misleading, because the statement is actually a string, so it's better to write it as such:

Get-ADComputer -Filter "name -like '$nameregex' -and Enabled -eq 'true'"

Related. Also related.

And FTR: you're using wildcard matching here (operator -like), not regular expressions (operator -match).

查看更多
Explosion°爆炸
3楼-- · 2019-03-30 01:25

Add double quote

$nameRegex = "chalmw-dm*"

-like "$nameregex" or -like "'$nameregex'"

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-03-30 01:37

Or

-like '*'+$nameregex+'*'

if you would like to use wildcards.

查看更多
登录 后发表回答