问题描述
我有拉头发的问题(我认为)
代码如下: $dn="abc.com"
Get-Recipient -Filter {EmailAddresses -Like '$dn'} -- 不起作用
Get-Recipient -Filter {EmailAddresses -Like '*$dn*'} -- 不起作用
Get-Recipient -Filter {EmailAddresses -Like *'$dn'*} -- 不起作用
Get-Recipient -Filter {EmailAddresses -Like '*abc.com*'} -- WORKS
如何使用变量而不是文字字符串值?
提前致谢。
解决方法
使用 expandable string(插值字符串,"..."
):
Get-Recipient -Filter "EmailAddresses -Like '*$dn*'"
请注意,Get-Recipient
的 -Filter
参数是一个 字符串,而且使用 script block ({ ... }
) 不仅没有必要,但会导致概念混乱。
实际上,当一个脚本块被传递时,它的逐字内容(除了{
和}
)被用作字符串值,所以no 发生变量引用的扩展。
- 注意谢谢,AdminOfThings:与
Get-ADUser
(参见this answer)不同,Get-Recipient
可以不执行变量其自身的解释,因此如果 PowerShell 变量或表达式不是"..."
、$null
和$true
,则总是需要可扩展字符串 ($false
)将在过滤器中使用,然后必须将其转义为`$null
、`$true
和`$false
。 否则,使用 single-quoting(逐字字符串,'...'
),其中不需要转义(除了将嵌入的'
转义为''
) - 参见 {{ 3}} 和 Recipient filters in Exchange PowerShell commands。
单引号内的 PowerShell 变量没有展开,所以 $dn 不是 abc.com
而是 $dn
,只需将单引号替换为双引号即可。