2010-12-13 24 views

Odpowiedz

74

chciałbym trzymać z czeku $null od każdej wartości innej niż '' (pusty ciąg znaków), 0, $false i $null przejdzie czek: if ($ie) {...}.

38

Można również zrobić

if ($ie) { 
    # Do Something if $ie is not null 
} 
+0

Lubię tę opcję i jego negację 'if (-nie czyli $) {# zrób coś jeśli $ czyli nie istnieje/jest falsey}' –

11

W swoim szczególnym przykładzie być może , nie musisz wykonywać żadnych kontroli w ogóle. Czy to możliwe, że New-Object zwraca zero? Nigdy tego nie widziałem. Polecenie powinno zakończyć się niepowodzeniem w przypadku problemu, a reszta kodu w przykładzie nie zostanie wykonana. Dlaczego więc mielibyśmy to robić?

Tylko w kodzie jak poniżej musimy pewne kontrole (Explicit porównania z $ null jest najlepszy):

# we just try to get a new object 
$ie = $null 
try { 
    $ie = New-Object -ComObject InternetExplorer.Application 
} 
catch { 
    Write-Warning $_ 
} 

# check and continuation 
if ($ie -ne $null) { 
    ... 
} 
+1

Jeżeli COM Obiekt robi” t istnieje, New-Object rzuci wyjątek. Ale nie widzę, jak może zwrócić zerowy. Ignorowanie wyjątku tylko wtedy, aby następnie przetestować pod kątem zerowym, jest złą formą. – JasonMArcher

+0

@JasonMArcher: Zgadzam się z ostatnią uwagą, absolutnie. Ale naprawdę, czego oczekiwałbyś ode mnie w wersji demo? Poza tym, w zależności od scenariusza, nawet ten kod może być w porządku. –

+0

Zasadniczo, umieść cały kod, który używa $ tj. Wewnątrz try {}. W ten sposób zostanie pominięty, jeśli wystąpi wyjątek. – JasonMArcher

1

typu skontaktować się z operatorem -is zwraca false dla każdego wartość null. W większości przypadków, jeśli nie wszystkie, wartość $ -is [System.Object] będzie prawdą dla każdej możliwej wartości innej niż NULL. (We wszystkich przypadkach będzie to wartość false dla dowolnej wartości zerowej.)

Moja wartość to nic, jeśli nie obiekt.

+1

Lub nawet '$ wartość -is [__ComObject]' –

Powiązane problemy