【发布时间】:2011-12-01 23:48:24
【问题描述】:
我想使用 PowerShell 检查是否存在 IIS Web 应用程序(或可能存在其他类型的项目)。我可以使用Get-Item 来执行此操作,但是如果该项目不存在,则会报告错误,这会误导用户运行脚本——实际上一切都很好时,它看起来像是出了问题。
如何才能不出错?
【问题讨论】:
标签: powershell
我想使用 PowerShell 检查是否存在 IIS Web 应用程序(或可能存在其他类型的项目)。我可以使用Get-Item 来执行此操作,但是如果该项目不存在,则会报告错误,这会误导用户运行脚本——实际上一切都很好时,它看起来像是出了问题。
如何才能不出错?
【问题讨论】:
标签: powershell
cmdlet Test-Path 就是专门为此设计的,它判断路径中的项目是否存在。它返回一个布尔值并且不会产生错误。
也可以使用 cmdlet Get-Item(和类似的),但不能直接使用。已经提出了一种方法:使用-ErrorAction SilentlyContinue。知道实际上它仍然会产生错误可能很重要。它只是没有显示出来。查看命令后的错误集合$Error,有错误。
仅供参考
有一种有趣的方法可以避免此错误(它也适用于其他一些没有 Test-Path 替代项的 cmdlet,例如 Get-Process)。假设我们要检查项目“MyApp.exe”(或进程“MyProcess”)是否存在。然后这些命令在丢失的目标上不返回任何内容,同时它们不会产生错误:
Get-Item "[M]yApp.exe"
Get-Process "[M]yProcess"
这些 cmdlet 不会为通配符目标生成错误。我们使用这些有趣的通配符来实际匹配单个项目。
【讨论】:
使用命令...get-item blah -ErrorAction SilentlyContinue
【讨论】:
-ErrorAction SilentlyContinue 可简写为-ea si, dir app_offline.htm -ea si | del