Estou procurando a melhor maneira de verificar se existe um objeto Com.
Aqui está o código que tenho; Eu gostaria de melhorar a última linha:
$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
fonte
fonte
Você também pode fazer
fonte
if (-not $ie) { # Do something if $ie doesn't exist/is falsey }
Em seu exemplo particular, talvez você não precise realizar nenhuma verificação . É possível que
New-Object
retorne nulo? Eu nunca vi isso. O comando deve falhar no caso de um problema e o resto do código no exemplo não será executado. Então, por que deveríamos fazer essas verificações?Apenas no código abaixo, precisamos de algumas verificações (a comparação explícita com $ null é a melhor):
fonte
O que todas essas respostas não destacam é que, ao comparar um valor com $ null, você deve colocar $ null no lado esquerdo, caso contrário, poderá ter problemas ao comparar com um valor do tipo coleção. Veja: https://github.com/nightroman/PowerShellTraps/blob/master/Basic/Comparison-operators-with-collections/looks-like-object-is-null.ps1
O bloco acima é (infelizmente) executado. O que é ainda mais interessante é que no Powershell um valor $ pode ser $ null e não $ null:
Portanto, é importante colocar $ null no lado esquerdo para fazer essas comparações funcionarem com coleções:
Acho que isso mostra mais uma vez o poder do Powershell!
fonte
$null
no lado esquerdoA verificação de tipo com o operador -is retorna falso para qualquer valor nulo. Na maioria dos casos, se não em todos, $ value -is [System.Object] será verdadeiro para qualquer valor não nulo possível. (Em todos os casos, será falso para qualquer valor nulo.)
Meu valor não é nada senão um objeto.
fonte
$value -is [__ComObject]
Eu tive o mesmo problema. Esta solução funciona para mim.
https://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.getactiveobject(v=vs.110).aspx
fonte
No caso de você ser como eu e aterrissou aqui tentando encontrar uma maneira de dizer se a sua variável do PowerShell é este tipo particular de inexistente:
Então aqui está um código que funcionou para mim:
exemplo de uso:
misturado com as melhores respostas de outras pessoas:
e algumas outras coisas legais para saber:
fonte