2010-12-13 102 views
59

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

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

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

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

回答

74

我要坚持,因为比''(空字符串)以外的任何值$null检查,0$false$null将通过支票:if ($ie) {...}

38

你也可以做

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

我喜欢这个选项,它的否定'如果( - 不是即$){#做的东西,如果$即不存在/是falsey}' – 2017-09-22 20:44:11

11

在您的特定示例中,或许您不需要执行任何检查New-Object是否有可能返回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) { 
    ... 
} 
+1

如果COM对象类型没有按”如果存在,New-Object将抛出异常。但我不明白它是如何返回null的。此外,忽略仅用于测试null的异常是不好的形式。 – JasonMArcher 2010-12-15 17:04:06

+0

@JasonMArcher:我完全同意最后一句话。但是,真的,你期望我在演示范例中写什么?此外,根据场景,即使这个代码可能会很好。 – 2010-12-15 18:00:18

+0

本质上,将所有使用$ ie的代码放在try {}中。这样,如果发生异常,它会被跳过。 – JasonMArcher 2010-12-15 18:14:51

1

类型检查与-is运营商提交的任何空值假。 在大多数情况下,如果不是全部,$ value -is [System.Object]对于任何可能的非空值都将为true。 (在任何情况下,对于任何空值都是错误的。)

如果不是对象,我的值就是无关紧要。

+1

甚至 '$ value -is [__ComObject]' – 2015-02-24 16:41:10

相关问题