powershell递归变量范围

时间:2015-03-02 23:04:34

标签: powershell recursion

我有一个自称的脚本。我需要让脚本在它所处的级别维护一个变量。换句话说,因为剧本"起泡"对于递归,变量应该是它调用它时的变量。

似乎变量的范围不能很好地实现。示例代码(包含在test.ps1中):

param ($y)
set-variable -name temp -scope script -value $y

while ($continue -ne "n")
{
    $temp = $temp + 1
    $output = "Temp=" + $temp + " ::y=" + $y
    write-host $output
    $continue = read-host "Pause..."
    . .\test.ps1 $temp
}

write-host "exiting $temp - $y"

输出:

> PS C:\Users\evanroy\Documents\SCripts> .\test.ps1 1
> Temp=2 ::y=1
> Pause...:
> Temp=3 ::y=2
> Pause...:
> Temp=4 ::y=3
> Pause...:
> Temp=5 ::y=4
> Pause...: n
> exiting 5 - 5
> exiting 5 - 5
> exiting 5 - 5
> exiting 5 - 5
> exiting 5 - 5

期望的输出:

>PS C:\Users\evanroy\Documents\SCripts> .\test.ps1 1
>Temp=2 ::y=1
>Pause...:
>Temp=3 ::y=2
>Pause...:
>Temp=4 ::y=3
>Pause...:
>Temp=5 ::y=4
>Pause...: n
>exiting 5 - 5
>exiting 4 - 5
>exiting 3 - 5
>exiting 2 - 5
>exiting 1 - 5

注意"退出"第一个变量会在最初调用时显示该值。

1 个答案:

答案 0 :(得分:1)

点源与"称自己"不同。点源的工作方式就像您将脚本粘贴到当前脚本并立即开始执行一样。

您可能希望使用&运算符调用脚本。

您应该仔细阅读about_Scopes