使用带有变量的“-Filter”和“-Like”

问题描述

我有拉头发的问题(我认为)

代码如下: $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,只需将单引号替换为双引号即可。