我正在尝试在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 和 |无效,但输出仍然显示在我的屏幕上。有什么想法可以阻止它显示此“有用”消息吗?
谢谢
吉姆
答案 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