gpt4 book ai didi

参数中的 Powershell 变量扩展

转载 作者:行者123 更新时间:2023-12-03 23:57:57 30 4
gpt4 key购买 nike

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

$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}`" )"

最佳答案

您的变量(至少在示例代码中)被命名为 $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 是一个 string 属性,但您没有将过滤器表达式括在任何类型的引号中。相反,您使用 {} 括号。这在一般情况下很好,但当您的字符串通过 {} 括号指定时,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')"

关于参数中的 Powershell 变量扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079674/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com