我正在尝试在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。
-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:
"..."