检查PowerShell对象是否存在的最佳方法?

我正在寻找检查Com对象是否存在的最佳方法。

这是我的代码; 我想改善最后一行:

$ie = New-Object -ComObject InternetExplorer.Application $ie.Navigate("http://www.stackoverflow.com") $ie.Visible = $true $ie -ne $null #Are there better options? 

我会坚持$null检查,因为除了'' (空string), 0$false$null以外''任何值都将通过检查: if ($ie) {...}

你也可以做

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

在你的特定例子中,也许你根本不需要执行任何检查 。 这有可能是New-Object返回null? 我从来没有见过。 如果出现问题,该命令将失败,示例中的其余代码将不会执行。 那么我们为什么要这样做呢?

只有在下面的代码中,我们需要一些检查(与$ null的显式比较是最好的):

 # 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) { ... } 

使用-is运算符进行types检查会为任何空值返回false。 在大多数情况下,如果不是全部,$ value -is [System.Object]对于任何可能的非空值都是true。 (在任何情况下,对于任何空值都是错误的。)

如果不是一个对象,我的价值就是没有。

我有同样的问题。 这个解决scheme适用于我。

 $Word = $null $Word = [System.Runtime.InteropServices.Marshal]::GetActiveObject('word.application') if ($Word -eq $null) { $Word = new-object -ComObject word.application } 

https://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.getactiveobject(v=vs.110).aspx