如何在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"
答案 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