在函数中增加PowerShell中的变量

时间:2014-07-09 03:53:28

标签: powershell

如何在PowerShell函数中增加变量?

我使用以下示例,没有任何数据输入到该功能。我想在每次调用函数时递增变​​量。变量$ increment添加了1,然后在脚本完成时显示$ increment的总和。

运行以下内容时的总数为0,而我想要的结果是4,因为函数comparethis已运行4次,每次$ increment增加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 个答案:

答案 0 :(得分:23)

您正在遇到动态范围问题。见about_scopes。函数$ increment内部未定义,因此从全局范围复制。全局$ increment不会被修改。如果您想修改它,您可以执行以下操作。

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

答案 1 :(得分:2)

如果您希望每次执行相同的脚本时都重置计数器,请使用 $script 范围:

$counter = 1;

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

    $script:counter++
}

Next # 1
Next # 2
Next # 3

使用 $global 范围,您将在第二次脚本运行时获得 4 5 6,而不是 1 2 3

答案 2 :(得分:0)

我建议不要使用全局变量,而是使用对变量的引用来调用该函数:

[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