将变量与 Get-ADComputer -filter 配合使用

Using a variable with Get-ADComputer -filter

提问人:Kenny 提问时间:11/3/2023 更新时间:11/4/2023 访问量:53

问:

我可能想多了,但无法让这个简单的代码编辑与 Powershell 一起使用

这工作正常

Get-ADComputer -Filter "operatingsystem -like "Windows server 2012"

但是,我想使用一个变量,例如 $ServerOS = “Windows Server 2022”

然后在同一代码中使用该变量,如下所示

Get-ADComputer -Filter "operatingsystem -like "$EOLOS"

但是,由于 -filter 使用“单”引号,因此它不起作用。我将如何编辑代码以使变量工作?

Get-ADComputer -Filter "operatingsystem -like "Windows server 2012"
PowerShell Active-Directory 报价

评论

4赞 Mathias R. Jessen 11/3/2023
在字符串文字中使用单引号,并记住以平衡结尾:"Get-ADComputer -Filter "operatingsystem -like '$EOLOS'"
1赞 Santiago Squarzon 11/3/2023
值得注意的是,对于通配符搜索,它转换为相同的LDAP语法,在这种情况下应使用:-like-eq"operatingsystem -eq '$EOLOS'"
0赞 mklement0 11/3/2023
如果您确实想使用 embedded ,请将它们转义为 (或):"`""""operatingsystem -eq `"$EOLOS`""
0赞 Kenny 11/5/2023
谢谢! @MathiasR.Jessen,做到了!

答:

1赞 Elior Machlev 11/4/2023 #1

我所做的是拆分过滤器参数,将其插入到变量中,并将整个变量称为过滤器。

通过您的示例,您将获得以下结果:

$EOLOS='Windows server 2012'
$Filter='operatingsystem -like "*' + $EOLOS + '*"'
#Filter value: operatingsystem -like "*Windows server 2012*"
Get-ADComputer -Filter $Filter

但是,就您的具体情况而言,听起来最好使用等于 (-eq),因为它是一个确切的值(但由您决定):

$EOLOS='Windows server 2012'
$Filter='operatingsystem -EQ "' + $EOLOS + '"'
#Filter value: operatingsystem -EQ "Windows server 2012"
Get-ADComputer -Filter $Filter