【问题标题】:Check if an item exists without an error if it doesn't exist如果项目不存在,则检查项目是否存在且没有错误
【发布时间】:2011-12-01 23:48:24
【问题描述】:

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

如何才能不出错?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    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 不会为通配符目标生成错误。我们使用这些有趣的通配符来实际匹配单个项目。

    【讨论】:

    • 这将是我的方法!另外值得注意的是,您可以用这种方法回显出好的发现,并且不会因为不存在的文件而出现红色错误。 if (Test-path $Test){write-host $Test} 默认情况下,不存在的item不会有事件,所以什么都不显示,或者false被抑制。
    • 这是解决问题的最佳方法
    【解决方案2】:

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

    【讨论】:

    • -ErrorAction SilentlyContinue 可简写为-ea si, dir app_offline.htm -ea si | del
    • 为了便于阅读,我不会在脚本中缩写(根据问题)。
    • 严格来说这不是问题的答案,下面的测试路径答案是实际检查
    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2012-03-25
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多