Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 453 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Azure DevOps - Setting and Using Variables in PowerShell Scripts

#1
I have an Azure DevOps build pipeline that has two separate PowerShell scripts. In the first script, I am getting a value from an XML file and setting that value in an environment variable. In my second script, I want to use the value in the environment variable. Unfortunately, I don't see the environment variable getting set. At this time, I have:

**Script 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)"

When script 1 runs, I see:

Set environment variable to ()
[All of the environment variable BUT, I DO NOT SEE ONE NAMED "DepartmentId"]
Department Id (1)

Notice: 1) The `$env:DepartmentId` value is not printing in the "Set environment variable" statement and 2) The `DepartmentId` value is NOT listed in the environment variable list. My intention is to use `DepartmentId` in the second script, which looks like this:

**Script 2:**

Write-Host "Using Department: $(env:DepartmentId)"

At this time, the script just shows:

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.

I've seen the other related SO questions and reviewed the docs. However, this simply isn't working. I don't understand what I'm doing wrong. Can someone please show me how to fix this and explain what I'm doing wrong? Thank you!

Reply

#2
To set environmental variables you need to set it using

$env:departmentId = $myXml.Department.Id

When using variables within strings you still need the $ sign in front of variables. As in

Write-Host "Using Department: $($env:DepartmentId)"

The reason environmental variables look different for get-childItem is that you are actually listing a psprovider, not the accessing the variable.

Get-ChildItem Env:

[To see links please register here]

Reply

#3
**Script 1**

Use quotes when setting the environment variable via `task.setvariable` since `#` signifies a PowerShell comment. You have commented out the string you intend to output.

Also note that the environment variable may not be available in the script where you set it since the pipeline must first process `task.setvariable` in the output.

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

**Script 2**

You must still reference variables via `$` inside an expression. You're missing `$` before `env`.

Write-Host "Using Department: $($env:DepartmentId)"
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through