Ich suche nach dem besten Weg, um zu überprüfen, ob ein Com-Objekt vorhanden ist.
Hier ist der Code, den ich habe; Ich möchte 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?
powershell
object
null
powershell-2.0
LaPhi
quelle
quelle
Sie können auch tun
quelle
if (-not $ie) { # Do something if $ie doesn't exist/is falsey }
In Ihrem speziellen Beispiel müssen Sie möglicherweise überhaupt keine Überprüfungen durchführen . Ist das möglich, dass
New-Object
null zurückgegeben wird? 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. Warum sollten wir diese Überprüfungen überhaupt durchführen?Nur im folgenden Code benötigen wir einige Überprüfungen (expliziter Vergleich mit $ null ist am besten):
quelle
Was all diese Antworten nicht hervorheben, ist, dass Sie beim Vergleich eines Werts mit $ null $ null auf der linken Seite setzen müssen, da Sie sonst beim Vergleich mit einem Wert vom Typ Sammlung möglicherweise Probleme bekommen. Siehe: https://github.com/nightroman/PowerShellTraps/blob/master/Basic/Comparison-operators-with-collections/looks-like-object-is-null.ps1
Der obige Block wird (leider) ausgeführt. Noch interessanter ist, dass in Powershell ein $ -Wert sowohl $ null als auch nicht $ null sein kann:
Daher ist es wichtig, $ null auf der linken Seite zu setzen, damit diese Vergleiche mit Sammlungen funktionieren:
Ich denke, dies zeigt noch einmal die Kraft von Powershell!
quelle
$null
auf der linken Seite enthältDie Typprüfung mit dem Operator -is gibt false für jeden Nullwert zurück. In den meisten Fällen, wenn nicht allen, ist $ value -is [System.Object] für jeden möglichen Wert ungleich Null wahr. (In allen Fällen ist es für jeden Nullwert falsch.)
Mein Wert ist nichts, wenn nicht ein Objekt.
quelle
$value -is [__ComObject]
Ich hatte das gleiche Problem. Diese Lösung funktioniert bei mir.
https://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.getactiveobject(v=vs.110).aspx
quelle
Wenn Sie wie ich sind und hier gelandet sind, um herauszufinden, ob Ihre PowerShell-Variable diese bestimmte Variante von nicht vorhanden ist:
Dann ist hier ein Code, der für mich funktioniert hat:
Anwendungsbeispiel:
zusammengesetzt aus den besseren Antworten anderer Leute:
und einige andere coole Dinge zu wissen:
quelle