使用变量与"-Filter"命令

9

我尝试过滤掉像这样的内容:

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

这个方法很有效,可以得到我想要的结果...
现在我希望把"name -like ..."部分作为一个变量,如下所示:
Get-ADComputer -Filter {name -like '$nameregex' -and Enabled -eq "true"} |

我查看了几个问题(例如PowerShell AD Module - Variables in Filter),但这对我没有用。

我尝试了以下内容:

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

在使用Get-ADComputer命令时,需要注意是否加上单引号'

有没有人能给我一些提示?


1
单引号字符串中的变量不会被插值。 - n0rd
4个回答

16
你不需要在变量周围加引号,所以只需简单更改这个:
Get-ADComputer -Filter {name -like '$nameregex' -and Enabled -eq "true"}

转化为以下内容:

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

注意,脚本块符号用于过滤语句是具有误导性的,因为该语句实际上是一个字符串,更好的写法是直接写成字符串形式:

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

相关同样相关

并且,FTR:您在这里使用通配符匹配(运算符-like),而不是正则表达式(运算符-match)。


1

添加双引号

$nameRegex = "chalmw-dm*"

-like "$nameregex" 或者 -like "'$nameregex'"


0

试试这个:

$NameRegex = "chalmw-dm"  
$NameR = "$($NameRegex)*"
Get-ADComputer -Filter {name -like $NameR -and Enabled -eq $True}

-1

或者

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

如果您想使用通配符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接