2つの個別のPowerShellスクリプトを含むAzure DevOpsビルドパイプラインがあります。最初のスクリプトでは、XMLファイルから値を取得し、その値を環境変数に設定しています。 2番目のスクリプトでは、環境変数の値を使用します。残念ながら、環境変数が設定されていません。現在、私は持っています:
スクリプト1:
$myXml = [xml](Get-Content ./MyXml.xml)
$departmentId = $myXml.Department.Id
Write-Host ##vso[task.setvariable variable=DepartmentId;]$departmentId
Write-Host "Set environment variable to ($env:DepartmentId)"
Get-ChildItem Env:
Write-Host "Department Id ($departmentId)"
スクリプト1を実行すると、次のようになります。
Set environment variable to ()
[All of the environment variable BUT, I DO NOT SEE ONE NAMED "DepartmentId"]
Department Id (1)
注意:1)$env:DepartmentId
値が「環境変数の設定」ステートメントで出力されず、2)DepartmentId
値が環境変数リストにリストされていません。私の意図は、次のような2番目のスクリプトでDepartmentId
を使用することです。
スクリプト2:
Write-Host "Using Department: $(env:DepartmentId)"
現時点では、スクリプトは次のことを示しています。
env:DepartmentId : The term 'env:DepartmentId' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
他の関連するSO=質問を見て、ドキュメントを確認しました。しかし、これは単に機能していません。私が間違っていることを理解していません。誰かが私に方法を教えてもらえますか?これを修正して、私が間違っていることを説明するには?ありがとう!
スクリプト1
task.setvariable
はPowerShellコメントを表すため、#
を介して環境変数を設定するときは引用符を使用してください。出力する文字列をコメント化しました。
また、パイプラインは最初に出力でtask.setvariable
を処理する必要があるため、設定したスクリプトで環境変数を使用できない場合があることに注意してください。
$myXml = [xml](Get-Content ./MyXml.xml)
$departmentId = $myXml.Department.Id
Write-Host "##vso[task.setvariable variable=DepartmentId;]$departmentId"
Write-Host "Set environment variable to ($env:DepartmentId)"
Get-ChildItem Env:
Write-Host "Department Id ($departmentId)"
スクリプト2
式の中では$
を介して変数を参照する必要があります。 env
の前に$
がありません。
Write-Host "Using Department: $($env:DepartmentId)"
環境変数を設定するには、次を使用して設定する必要があります
$env:departmentId = $myXml.Department.Id
文字列内で変数を使用する場合でも、変数の前に$記号が必要です。のように
Write-Host "Using Department: $($env:DepartmentId)"
Get-childItemで環境変数が異なって見える理由は、変数にアクセスするのではなく、実際にpsproviderをリストしているためです。
Get-ChildItem Env: