Using "-Filter" with a variable

134,172

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

Solution 2

Add double quote

$nameRegex = "chalmw-dm*"

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

Share:
134,172
Michael
Author by

Michael

Updated on February 29, 2020

Comments

  • Michael
    Michael about 4 years

    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?