3

Exchangeメールボックスを処理するためにこのpowershellスクリプトに取り組んでおり、パラメーターの1つ(実行する必要がある多くのコマンド内)には、RecipientFilterの下に変数が埋め込まれている必要があります。どのような種類の展開を行っても、展開するのではなく、常に文字通り ($prefix として) 評価します。それを逃れるための特別な方法があるのか​​ 、それとも何なのかわかりません。アイデア?

$prefix="FAKEDOM"

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

編集:変数名を修正しました。問題は $prefix の 2 番目の使用に関するものであることに注意してください。最初の使用は正しく機能しています。

編集:作業ソリューション:

 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 に答える