我正在寻找检查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