34

How do I increment a variable in a PowerShell function?

I'm using the below example without any data to be input to the function. I want to increment a variable every time a function is called. The variable $incre has 1 added to it and then displays the total of $incre when the script completes.

The total when running the below is 0, whereas the result I want is 4 as the function comparethis has been run 4 times and each time $incre has been incremented by 1.

 $incre = 0

 function comparethis() {
     # Do this comparison

    $incre++
    Write-Host $incre
 }

 comparethis #compare 2 variables
 comparethis #compare 2 variables
 comparethis #compare 2 variables
 comparethis #compare 2 variables

 Write-Host "This is the total $incre"

3 Answers 3

47

You are running into a dynamic scoping issue. See about_scopes. Inside the function $incre is not defined so it is copied from the global scope. The global $incre is not modified. If you wish to modify it you can do the following.

$incre = 0

function comparethis() {
    #Do this comparison

    $global:incre++
    Write-Host $global:incre
}

comparethis #compare 2 variables
comparethis #compare 2 variables
comparethis #compare 2 variables
comparethis #compare 2 variables

Write-Host "This is the total $incre"
Sign up to request clarification or add additional context in comments.

1 Comment

In the example above it is probably more likely that you want to treat the $incre variable as a script-level variable, rather than a global variable. In that case, you should use $Script:incre rather than $Global:incre
7

If you want your counter to reset each time you execute the same script use $script scope:

$counter = 1;

function Next() {
    Write-Host $script:counter

    $script:counter++
}

Next # 1
Next # 2
Next # 3

With $global scope you will get 4 5 6 on the second script run, not 1 2 3.

Comments

2

Rather than using a global variable I woul suggest to call the function with a reference to the variable:

[int]$incre = 0

function comparethis([ref]$incre) {
    $incre.value++;
}

comparethis([ref]$incre) #compare 2 variables
Write-Host $incre
comparethis([ref]$incre) #compare 2 variables
Write-Host $incre

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.