次のようなファイルがあります。
<Parameter Name="WebImage" Value="web:${BuildNumber}" />
<Parameter Name="ApiImage" Value="api:${BuildNumber}" />
${xxx}
ファイル内の出現箇所を環境変数に置き換えたいのですがxxx
。このファイルは、任意の数の環境変数を参照できます。それらは事前に知られていません。
私は次のようなことを試みています:
(Get-Content .\Cloud.xml) -replace "\$\{(\w+)\}", "$([Environment]::GetEnvironmentVariable('$1'))"
しかし、私はただ得る:
<Parameter Name="WebImage" Value="web:" />
<Parameter Name="ApiImage" Value="api:" />
GetEnvironmentVariable
コールは私が行うことができるので、動作します:
(Get-Content .\Cloud.xml) -replace "\$\{(\w+)\}", "$([Environment]::GetEnvironmentVariable('BuildNumber'))"
そしてそれはうまくいきます。$1
私が行うことができますので、呼び出しが動作します:
(Get-Content .\Cloud.xml) -replace "\$\{(\w+)\}", '$1'
そして、私は得るでしょう:
<Parameter Name="WebImage" Value="web:BuildNumber" />
<Parameter Name="ApiImage" Value="api:BuildNumber" />
しかし、私はこの2つを組み合わせることができないようです。関数の解決順序と関係があると思います。
$Matches
自動変数を使用してみてください。
(Get-Content .\Cloud.xml) |
ForEach-Object {
if ($_ -match "\$\{((\w+))\}")
{
$_ -replace "\$\{(\w+)\}",$([Environment]::GetEnvironmentVariable($Matches[1]))
}
else
{
$_
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加