2010-12-13 103 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

相關問題