• 屏蔽/捕获并输出错误


    ErrorAction 只能屏蔽非终止性错误,可用参数值如下:(有关详细信息,键入“get-help about_commonparameters”)。

    参数值:
    Stop: 显示错误消息并停止执行。

    Inquire: 显示错误消息,并询问您是否要继续。

    Continue: 显示错误消息并继续执行。

    SilentlyContinue: 无效果。不显示错误消息,执行继续而无中断。(默认)

    $ErrorActionPreference 和 ErrorAction 通用参数都不会影响 Windows

    示例:

    gwmi win32_operatingsystem -ComputerName 192.168.9.2 -Credential $cred #如果连接不到计算机则会报错
    
    gwmi win32_operatingsystem -ComputerName 192.168.9.2 -Credential $cred -ErrorAction silentlycontinue  #如果连接不到计算机则不会出现报错信息
    
    $process = Get-Process "asdfasd" -ErrorAction Silentlycontinue
    
    #使用 $? 判断是否正确
    #从这里开始隐藏所有的错误信息
    $ErrorActionPreference="SilentlyContinue"
    Stop-Process -Name "abc"
    
    #恢复$ErrorActionPreference,错误开始输出
    $ErrorActionPreference="Continue"

    屏蔽终止性错误:try{} catch {}

    如下代码为 零除 错误,直接运行将会返回错误:

    Write-Host "script begin"
    [int] "not a number"
    $denominator = 0
    $result = 50 / $denominator
    Write-Host "script end"
    
    使用try{} catch {}则会屏蔽其错误,没有输出:
    
    try
    {
    Write-Host "script begin"
    [int] "not a number"
    $denominator = 0
    $result = 50 / $denominator
    Write-Host "script end"
    }
    catch
    {}

     捕获终止错误并输出:

    try {get-adf;write-host "adf"}
    catch {$_.exception.message}

    检测到语法错误,会终止代码的执行,其错误会被捕获,但是 write-host "adf"并不会被继续执行。

    结果:

    捕获并输出非终止错误

    有时候会需要捕获非终止错误,比如 Remove-Item d:adfasdf.txt 删除一个不存在的文件:

    try {
    remove-item d:adfasdf.txt
    write-host "af"
    }
    catch {$_.exception.message}

    结果其错误并未被捕获,因为其是一个非终止错误,错误级别较低:

    可以将其改为终止错误,如下:

    try {
    $ErrorActionPreference='stop' #终止错误
    remove-item d:adfasdf.txt
    write-host "af"
    }
    catch {$_.exception.message}

    结果变成了终止错误,并被捕获:

    可以使用如下方法捕获并输出非终止错误:

    Remove-Item d:adfasdf.txt 2>d:za.txt 或者

    Remove-Item d:adfasdf.txt 2>>d:za.txt (追加到文本)

    自定义错误,使用 Trap:

    Trap
    {
    "出错了啊: $($_.Exception.Message)";
    Continue;
    } 
    Remove-Item "Books" -ea Stop 

    结果:

    还有一些错误是 ErrorAction和try{} catch {}都无法屏蔽的,如下:

     net use \192.168.9.2 2299 /user:administrator ,如果连接不到目标计算机,则会出现错误 “发生系统错误 53.找不到网络路径”。

    可以使用 “>nul 2>nul” 屏蔽其错误信息,然后依然可以继续使用 $lastexitcode 或者 %errorlevel% 得到返回值

     cmd /c " net use \192.168.9.2 2GeneDNA9 /user:administrator >nul 2>nul"

    解释:

    >nul 或者 1>nul 作用是屏蔽成功执行命令的输出内容
    2>nul 作用是屏蔽命令执行失败的输出内容
    1>nul 2>nul 作用是屏蔽的所有输出提示 [不论正确与否]

  • 相关阅读:
    Hadoop启动脚本分析
    java基础-Idea开发工具介绍
    Hadoop集群-HDFS集群中大数据运维常用的命令总结
    Hadoop部署方式-高可用集群部署(High Availability)
    Hadoop部署方式-完全分布式(Fully-Distributed Mode)
    Hadoop部署方式-伪分布式(Pseudo-Distributed Mode)
    Hadoop部署方式-本地模式(Local (Standalone) Mode)
    Hadoop基础原理
    Java基础-DBCP连接池(BasicDataSource类)详解
    nc命令的常用参数介绍
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/3884510.html
Copyright © 2020-2023  润新知