检查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 }