2010-12-13 16 views
59

Ich bin auf der Suche nach dem besten Weg, um zu überprüfen, ob ein Com-Objekt existiert.Am besten prüfen, ob ein PowerShell-Objekt vorhanden ist?

Hier ist der Code, den ich habe; Ich mag die letzte Zeile verbessern:

$ie = New-Object -ComObject InternetExplorer.Application 
$ie.Navigate("http://www.stackoverflow.com") 
$ie.Visible = $true 

$ie -ne $null #Are there better options? 

Antwort

74

ich da jeden Wert mit dem $null Scheck würde haften tun andere als '' (leere Zeichenkette), 0, $false und $null wird die Prüfung bestehen: if ($ie) {...}.

38

Sie können auch

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

Ich mag diese Option und seine Negation 'if (-nicht dh $) {# etwas tun, wenn $ also nicht existiert/ist Falsey}' –

11

In Ihrem speziellen Beispiel vielleicht müssen Sie überhaupt keine Prüfungen durchführen. Ist das möglich, dass New-Object null zurückgibt? Das habe ich noch nie gesehen. Der Befehl sollte im Falle eines Problems fehlschlagen und der Rest des Codes im Beispiel wird nicht ausgeführt. Also warum sollten wir das überhaupt tun?

Nur im Code wie unten wir einige Prüfungen müssen (explizite Vergleich mit $ null ist die beste Bewertung):

# 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

Wenn das COM-Objekt ist doesn‘ t existieren, wird New-Object eine Ausnahme auslösen. Aber ich sehe nicht, wie es eine Null zurückgeben könnte. Auch das Ignorieren der Ausnahme, nur dann auf Null zu testen, ist eine schlechte Form. – JasonMArcher

+0

@JasonMArcher: Ich stimme der letzten Bemerkung absolut zu. Aber was würdest du von mir erwarten, wenn ich im Demo-Beispiel schreibe? Abhängig von einem Szenario könnte sogar dieser Code gut sein. –

+0

Im Wesentlichen setzen Sie den gesamten Code, der $ ie innerhalb des try {} verwendet. Auf diese Weise wird es übersprungen, wenn eine Ausnahme vorliegt. – JasonMArcher

1

Typ-Check mit der -is Operator für jeden Null-Wert false zurückgibt. In den meisten Fällen, wenn nicht alle, ist $ value -is [System.Object] für alle möglichen Nicht-Null-Werte wahr. (In allen Fällen ist es für jeden Nullwert falsch.)

Mein Wert ist nichts, wenn nicht ein Objekt.

+1

Oder sogar '$ value -is [__ComObject]' –

Verwandte Themen