Estoy buscando la mejor manera de verificar si existe un objeto Com.
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?
powershell
object
null
powershell-2.0
LaPhi
fuente
fuente
Tu tambien puedes hacer
fuente
if (-not $ie) { # Do something if $ie doesn't exist/is falsey }
En su ejemplo particular, tal vez no tenga que realizar ninguna verificación . ¿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 esas comprobaciones?Solo en el código como a continuación necesitamos algunas verificaciones (la comparación explícita con $ null es la mejor):
fuente
Lo que no destacan todas estas respuestas es que al comparar un valor con $ null, debe poner $ null en el lado izquierdo; de lo contrario, puede tener problemas al comparar con un valor de tipo colección. Ver: https://github.com/nightroman/PowerShellTraps/blob/master/Basic/Comparison-operators-with-collections/looks-like-object-is-null.ps1
El bloque anterior se ejecuta (desafortunadamente). Lo que es aún más interesante es que en Powershell un $ value puede ser $ null y no $ null:
Por eso es importante poner $ null en el lado izquierdo para que estas comparaciones funcionen con colecciones:
¡Supongo que esto muestra una vez más el poder de Powershell!
fuente
$null
en el lado izquierdoLa verificación de tipo con el operador -is devuelve falso para cualquier valor nulo. En la mayoría de los casos, si no en todos, $ 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 más que un objeto.
fuente
$value -is [__ComObject]
Yo tuve el mismo problema. Esta solución me funciona.
https://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.getactiveobject(v=vs.110).aspx
fuente
En caso de que sea como yo y aterrizó aquí tratando de encontrar una manera de saber si su variable de PowerShell es este sabor particular de inexistente:
Entonces aquí hay un código que funcionó para mí:
ejemplo de uso:
mezclados con las mejores respuestas de otras personas:
y algunas otras cosas interesantes que debes saber:
fuente