检查项目是否存在而不存在错误(如果该项目不存在)

EMP*_*EMP 30 powershell

我想使用PowerShell来检查是否存在IIS Web应用程序(或者可能是其他类型的项目).我可以这样做Get-Item,但是如果项目不存在则报告错误,这会误导运行脚本的用户 - 当实际一切都很好时,看起来出了问题.

如何在没有错误的情况下执行此操作?

Rom*_*min 58

cmdlet Test-Path专门为此设计,它确定是否存在路径项.它返回一个布尔值,不会产生错误.

cmdlet Get-Item(和类似的)也可以使用,但不能直接使用.已经提出了一种方法:使用-ErrorAction SilentlyContinue.重要的是要知道它实际上仍会产生错误; 它只是没有显示出来.$Error在命令之后检查错误集合,错误就在那里.


仅供参考

有一种有趣的方法可以避免这种错误(它也适用于其他一些像Get-Process没有Test-Path替代品的cmdlet ).假设我们要检查项目"MyApp.exe"(或进程"MyProcess")的存在.然后这些命令在缺少目标时不返回任何内容,同时它们不会产生任何错误:

Get-Item "[M]yApp.exe"
Get-Process "[M]yProcess"
Run Code Online (Sandbox Code Playgroud)

这些cmdlet不会为通配符目标生成错误.我们使用这些有趣的通配符实际匹配单个项目.


Pre*_*gha 31

使用命令... get-item blah -ErrorAction SilentlyContinue

替代文字

  • `-ErrorAction SilentlyContinue`可缩短为`-ea si`,`dir app_offline.htm -ea si | del` (6认同)
  • 为了便于阅读,我不会在脚本中缩写(根据问题). (6认同)