禁止从Powershell命令输出

时间:2020-07-10 10:06:20

标签: powershell

我正在尝试在Powershell脚本中处理防火墙规则-这是我正在使用的行:

code_act = "127.0.0.1:5000/confirm-mail/"+token
mail.send_message("Account activation Link", sender="bot", recipients=email.split(), body="The activation link is " + code_act)

因此,如果返回任何规则,并返回某种存储在$ currentRules中的集合,则此方法很好用。一切都很好。

如果get-netfirewallrule没有找到匹配项,就会出现问题-我会提供帮助

$currentRules = get-netfirewallRule -CimSession computer4 -direction Inbound

位于输出的中间。我已经尝试了通常的> $ null |无效,但输出仍然显示在我的屏幕上。有什么想法可以阻止它显示此“有用”消息吗?

谢谢

吉姆

3 个答案:

答案 0 :(得分:2)

Peter Schneider的有用答案是正确的,尽管通常在需要为更多cmdlet设置erroraction集时使用该答案。
如果只想抑制此命令的错误输出,还可以直接为其指定参数-ErrorAction SilentlyContinue,例如:

$currentRules = Get-NetFirewallRule -CimSession computer4 -Direction Inbound -ErrorAction SilentlyContinue

还有一个-ErrorVariable参数,您可以让代码捕获您自己的变量内的任何异常并稍后进行检查:

$currentRules = Get-NetFirewallRule -CimSession computer4 -Direction Inbound -ErrorAction SilentlyContinue -ErrorVariable MyErrorVar
# display the error if any
$MyErrorVar

有时,即使ErrorAction设置为“ SilentlyContinue”,cmdlet也会输出异常。在这些情况下,您也可以使用try{}..catch{}块。 然后,您需要将ErrorAction设置为'Stop',这样非终止错误也将直接发送到catch块:

try {
    $currentRules = Get-NetFirewallRule -CimSession computer4 -Direction Inbound -ErrorAction Stop
}
catch {
    # write custom message on screen or write to log file or..
    Write-Warning "Failed to get Firewall rules.."
}

答案 1 :(得分:1)

您可以将$ ErrorActionPreference变量设置为“ SilentlyContinue”

$eap = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"
1/0
$ErrorActionPreference = $eap

答案 2 :(得分:0)

使用“尝试/捕获”结构可以捕获错误并进行处理,以防止在输出中出现不需要的错误消息。

$GNFArgs = @{CimSession = "computer4"
             Direction  = "Inbound"
             ErrorAction = "Stop"
            }

Try {
      $currentRules = get-netfirewallRule @GNFArgs
    }
Catch {
  #Process error here 
}

HTH