将变量放在带有“ -eq”的cmdlet中的问题

问题描述 投票:1回答:1

我正在尝试在Exchange 2019 powershell中做非常简单的事情,但是对于我一生来说,我似乎无法绕过简单的可变位置。该问题与Exchange无关,只是纯PS。

我需要执行该cmdlet

New-AddressList "XX Users" -RecipientFilter {((CustomAttribute2 -eq "XX") -and (RecipientType -eq 'UserMailbox'))}

很好,但是我想用变量替换“ XX用户”和“ XX”。

我可以这样说来代替“ XX用户”

$var1 = "XX Users" (this actually works)
$var2 = "XX" (does not work)

所以我得到

New-AddressList $var1 -RecipientFilter {((CustomAttribute2 -eq $var2) -and (RecipientType -eq 'UserMailbox'))}

对于我来说,$var2没有为-eq插入正确的值。我尝试了多种组合,包括使用单引号,双引号,对象,移动括号,但我一无所获。它可以采用原义或null。

powershell parameter-passing exchange-server
1个回答
0
投票

-RecipientFilter参数是[string]类型的,这意味着您传递的脚本块的literal内容-开头{和结尾}之间的所有内容-作为值传递。

即,no会进行变量引用(例如$var2)的插值,因此,除非New-AddressList本身通过访问调用者的变量主动执行该插值,否则将使用$var2进行verbatim

这听起来与AD(Active Directory)筛选器存在相同的问题-请参阅https://stackoverflow.com/a/44184818/45375(除了后者实际上do内插simple变量引用,而不是诸如expressions这样的变量引用) $var2.Name,这就是为什么最好不要依赖它的原因。

与在AD情况下​​一样,最好的方法是将-RecipientFilter构造为string,特别是构造为expandable string ("..."),可以在其中嵌入变量values

"..."
© www.soinside.com 2019 - 2024. All rights reserved.