Using “-Filter” with a variable in PowerShell

2019-03-30 01:27发布

问题:

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?

回答1:

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).



回答2:

Add double quote

$nameRegex = "chalmw-dm*"

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



回答3:

Or

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

if you would like to use wildcards.