我正在尋找檢查Com對象是否存在的最佳方法。檢查PowerShell對象是否存在的最佳方法?
這是我的代碼;我想改善的最後一行:
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate("http://www.stackoverflow.com")
$ie.Visible = $true
$ie -ne $null #Are there better options?
我正在尋找檢查Com對象是否存在的最佳方法。檢查PowerShell對象是否存在的最佳方法?
這是我的代碼;我想改善的最後一行:
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate("http://www.stackoverflow.com")
$ie.Visible = $true
$ie -ne $null #Are there better options?
我要堅持,因爲比''
(空字符串)以外的任何值$null
檢查,0
,$false
和$null
將通過支票:if ($ie) {...}
。
你也可以做
if ($ie) {
# Do Something if $ie is not null
}
在您的特定示例中,或許您不需要執行任何檢查。 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) {
...
}
如果COM對象類型沒有按」如果存在,New-Object將拋出異常。但我不明白它是如何返回null的。此外,忽略僅用於測試null的異常是不好的形式。 – JasonMArcher 2010-12-15 17:04:06
@JasonMArcher:我完全同意最後一句話。但是,真的,你期望我在演示範例中寫什麼?此外,根據場景,即使這個代碼可能會很好。 – 2010-12-15 18:00:18
本質上,將所有使用$ ie的代碼放在try {}中。這樣,如果發生異常,它會被跳過。 – JasonMArcher 2010-12-15 18:14:51
類型檢查與-is運營商提交的任何空值假。 在大多數情況下,如果不是全部,$ value -is [System.Object]對於任何可能的非空值都將爲true。 (在任何情況下,對於任何空值都是錯誤的。)
如果不是對象,我的值就是無關緊要。
甚至 '$ value -is [__ComObject]' – 2015-02-24 16:41:10
我有同樣的問題。這個解決方案適用於我。
$Word = $null
$Word = [System.Runtime.InteropServices.Marshal]::GetActiveObject('word.application')
if ($Word -eq $null)
{
$Word = new-object -ComObject word.application
}
我喜歡這個選項,它的否定'如果( - 不是即$){#做的東西,如果$即不存在/是falsey}' – 2017-09-22 20:44:11