2010-12-13 9 views
59

Estoy buscando la mejor manera de verificar si existe un Com Object.¿La mejor manera de verificar si existe un objeto PowerShell?

Aquí está el código que tengo; Me gustaría mejorar la última línea:

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

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

Respuesta

74

me gustaría seguir con el cheque $null ya que cualquier valor distinto de '' (cadena vacía), 0, y $false$null pasará el cheque: if ($ie) {...}.

38

También se puede hacer

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

me gusta esta opción y su negación 'si (es decir -no $) {# hacer algo si $ es decir, no existe/es Falsey-}' –

11

En su ejemplo particular, tal vez no tiene que realizar ningún control en absoluto. ¿Es posible que New-Object devuelva nulo? Nunca he visto eso. El comando debería fallar en caso de un problema y el resto del código en el ejemplo no se ejecutará. Entonces, ¿por qué deberíamos hacer eso en absoluto?

Sólo en el código, como a continuación necesitamos algunos controles (comparación explícita con $ nula es la mejor):

# 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

Si el tipo de objeto COM doesn' t existe, New-Object lanzará una excepción. Pero no veo cómo podría devolver un nulo. Además, ignorar la excepción solo para luego probar la nulidad es mala forma. – JasonMArcher

+0

@JasonMArcher: estoy de acuerdo con la última observación, absolutamente. Pero realmente, ¿qué esperas que escriba en el ejemplo de demostración? Además, dependiendo de un escenario, incluso este código podría estar bien. –

+0

Esencialmente, ponga todo el código que usa $ ie dentro del try {}. De esa forma se omite si hay una excepción. – JasonMArcher

1

Tipo-consulte con el operador -is devuelve false para cualquier valor nulo. En la mayoría de los casos, si no todo, $ value -is [System.Object] será verdadero para cualquier posible valor no nulo. (En todos los casos, será falso para cualquier valor nulo.)

Mi valor no es nada si no es un objeto.

+1

O incluso '$ value -is [__ComObject]' –

Cuestiones relacionadas