3

我正在使用这个 powershell 脚本来处理交换邮箱,其中一个参数(在我必须运行的许多命令中)需要在 RecipientFilter 下嵌入一个变量。无论我做什么类型的扩展,它总是按字面意思(作为$前缀)评估它,而不是扩展它。我不确定是否有一种特殊的方式我应该逃避它,或者什么。想法?

$prefix="FAKEDOM"

New-AddressList -name "AL_${prefix}_Contacts" -RecipientFilter {(RecipientType -eq 'MailContact') -and (CustomAttribute15 -eq $prefix)}

编辑:固定变量名称。请注意,问题是关于 $prefix 的第二次使用,第一次使用正常。

编辑:工作解决方案:

 New-AddressList -name "AL_${prefix}_Contacts" -RecipientFilter "(RecipientType -eq 'MailContact') -and (CustomAttribute15 -eq `"${prefix}`" )"
4

3 回答 3

5

您的变量(至少在示例代码中)被命名为$prefix,而不是$fakedom. 您需要在扩展中使用正确的变量名称。

另请注意,下划线字符将被假定为替换字符串中变量名的一部分,因此您需要使用$($variableName)${variableName}。也就是说,你不能做这样的替换:"vanilla_$variableName_strawberry",Powershell 会寻找一个名为 的变量variableName_Strawberry",它不存在。

总而言之,这就是您需要的:

$prefix="FAKEDOM"

New-AddressList -name "AL_${prefix}_Contacts" -RecipientFilter {(RecipientType -eq 'MailContact') -and (CustomAttribute15 -eq $prefix)}

编辑

您的编辑清楚地表明第一次使用$prefix是好的,它是造成麻烦的过滤器。 -RecipientFilter是一个字符串属性,但您没有将过滤器表达式括在任何类型的引号中。相反,您使用{}括号。{}一般来说这很好,但是当您的字符串通过方括号指定时,Powershell 不会扩展变量。

PS> function Parrot([string] $Message){ $message }
PS> $food = 'cracker'
PS> Parrot {Polly want a $food ?}
Polly want a $food ?

您需要更改为使用双引号:

PS> Parrot "Polly want a $food ?"
Polly want a cracker ?

因此,您的过滤器应如下所示(在$prefix值周围添加内部单引号):

-RecipientFilter "(RecipientType -eq 'MailContact') -and (CustomAttribute15 -eq '$prefix')"
于 2012-10-26T17:29:11.663 回答
2

试试这个:

New-AddressList -name "AL_$($prefix)_Contacts" ...

注意我添加的额外美元符号。

于 2012-10-26T01:44:48.063 回答
0

使用 Powershell 4 对参数进行变量扩展既不适合我,也不适合我,但以下是$($variableName)${variableName}

$prefix="FAKEDOM"

New-AddressList -name ("AL_" + $prefix + "_Contacts") -RecipientFilter {(RecipientType -eq 'MailContact') -and (CustomAttribute15 -eq $prefix)}
于 2014-03-27T09:07:29.977 回答