У меня есть сценарий, который вызывает себя. Мне нужно, чтобы скрипт поддерживал переменную на том уровне, на котором она находится. Другими словами, поскольку сценарий «вырывается» из рекурсии, переменная должна быть тем, чем она была, когда она называлась.Рекурсивная переменная переменной powershell
Похоже, что область видимости переменных не позволяет этого прекрасно. Пример кода (содержащийся в 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
Обратите внимание, как "выход" первая переменная будет показать, что значение, когда он был первоначально назван.
Или просто вызовите скрипт непосредственно, например. '. \ Test.ps1'. –
doh ... Я искал другую часть и забыл, что я это сделал. Я знал, что это что-то простое, я просто не мог его увидеть ... спасибо, –