2012-02-07 18 views
13

Chcę przetestować, czy zmienna ma przypisaną zmienną, a jeśli nie, wykonać akcję. Jak można to osiągnąć?powershell testowanie zmiennej, która nie została jeszcze przypisana.

Podjęto próbę z następującym kodem, ale otrzymałem błąd: prawy operand z "-is" musi być typem.

$ ProgramName nie jest przypisany w tym momencie.

If ($ProgramName -isnot $null) { 
    $ProgramName = $ProgramName + ', ' + $cncPrograms 
} 
Else { 
    If ($cncPrograms -isnot $null) { 
    $ProgramName = $cncPrograms 
    } 
} 

Odpowiedz

31

Każda nieprzypisana zmienna będzie mieć wartość null, a nie typ danych o wartości zerowej. Więc, po prostu to zrobić:

If ($ProgramName -ne $null) 

... że powróci TRUE jeśli został przypisany do innego niż wartość null.

Jeszcze łatwiej sprawdzić, aby to

IF($ProgramName) 

Który sprawdzi, czy to $null czy nie, chociaż logika jest odwrócony, więc można używać

IF(!$ProgramName) 

EDIT:

W komentarzach Ruffin rzuca dobry temat na tryb ścisły. Ta metoda również będzie działać:

Test-Path variable:ProgramName lub Test-Path variable:global:ProgramName, jeśli na przykład ma zasięg globalny. To zwróci $true lub $false w zależności od tego, czy zmienna istnieje.

+0

Dzięki. Znalazłem twoje wyjaśnienie bardziej przydatne po przeczytaniu artykułu opublikowanego przez Andy'ego Arismendiego. Teraz ma to sens. Dzięki za publikację. – resolver101

+2

Nie * myślę *, że działa z 'Set-StrictMode -version latest;', prawda? Jak powinieneś to sprawdzić, gdy włączony jest tryb ścisły? ** EDIT ** Podobno ['Zmienna testowa: globalna: foo '] (http://stackoverflow.com/a/3163008/1028230) – ruffin

+3

@ruffin 'Zmienna testowa: NazwaProgramu zwróci' $ true 'lub' $ false'. Dobry połów na trybie ścisłym. Dodałem to do odpowiedzi. – JNK

7

Test-Path variable:\var powinien zrobić to, co chcesz, tak myślę.

+0

Tak. działa też. Tak wiele sposobów sprawdzenia. Czy to nie jest dobra metoda? po prostu pytam, ponieważ skończyłeś zdanie z "I guess". – resolver101

+2

To jest naprawdę poprawna odpowiedź. Innym sposobem jest technicznie włamanie. Jest to zamierzony programowy sposób na zrobienie tego. – ZaxLofful

Powiązane problemy