2011-07-20 14 views
13

Jestem całkiem nowy, PowerShell, a ja po prostu nie uzyskiwanie jak zmodyfikować zmienną w zakresie dominującej:Jak zmodyfikować zmienną zakresu nadrzędnego za pomocą PowerShell

$val = 0 
function foo() 
{ 
    $val = 10 
} 
foo 
write "The number is: $val" 

Gdy uruchomię go uzyskać:

The number is: 0 

chciałbym go mieć 10. Ale PowerShell tworzy nową zmienną, która ukrywa jeden w zakresie dominującej.

Próbowałem je, ale bez powodzenia (zgodnie z dokumentacją):

$script:$val = 10 
$global:$val = 10 
$script:$val = 10 

Ale to nawet nie „kompilacji” że tak powiem. Czego mi brakuje?

Odpowiedz

17

Nie potrzeba używać zasięg globalny. Zmienna o tej samej nazwie mogła już istnieć w konsoli powłoki i możesz ją zaktualizować. Użyj modyfikatora zasięgu skryptu. Używając modyfikatora zasięgu, nie umieszczaj znaku $ w nazwie zmiennej.

$ script: val = 10

5

Jeśli chcesz korzystać z tego to można zrobić coś takiego:

$global:val=0 
function foo() 
{ 
    $global:val=10 
} 
foo 
write "The number is: $val" 
+0

I pierwsza linia może być po prostu '$ val = 0' ponieważ jest niejawnie zakres globalny. –

+0

To nie działa. Otrzymuję: Nieoczekiwany token "val" w wyrażeniu lub oświadczeniu. –

+1

Upewnij się, że masz $ global: val, a nie $ global: $ val –

5

Pozwól mi wskazać trzecią alternatywę, mimo że odpowiedź została już wykonana. Jeśli chcesz zmienić zmienną, nie bój się przekazywać jej przez odniesienie i pracować w ten sposób.

$val=1 
function bar ($lcl) 
{ 
    write "In bar(), `$lcl.Value starts as $($lcl.Value)" 
    $lcl.Value += 9 
    write "In bar(), `$lcl.Value ends as $($lcl.Value)" 
} 
$val 
bar([REF]$val) 
$val 

która zwraca:

1 
In bar(), $lcl.Value starts as 1 
In bar(), $lcl.Value ends as 10 
10 
9

Wiem, że to szalone stary, ale miałem podobne pytanie i znalazłem ten post w moich poszukiwaniach i chciałem podzielić odpowiedź znalazłem.

$val = 0 
function foo { 
    Set-Variable -scope 1 -Name "Val" -Value "10" 
} 
foo 
write "The number is: $val" 

Więcej informacji na temat zakresów można znaleźć tutaj: http://technet.microsoft.com/en-us/library/hh847849.aspx

+0

To jest odpowiedź najbliższa temu pytaniu, ponieważ właśnie zmienna w bezpośrednim zasięgu rodzica jest dostępna. – argonym

Powiązane problemy