如何阻止Powershell命令“Get-NetFirewallRule”引发错误?

如何阻止Powershell命令“Get-NetFirewallRule”引发错误?,powershell,firewall,Powershell,Firewall,我正在尝试使用Powershell确定防火墙规则是否存在 如果规则不存在,我会收到一条丑陋的错误消息。如果它确实存在,一切都好:) 如何检查规则是否存在,而不出现任何难看的红色错误消息 例如 错误消息(当规则不存在时) 任何人都知道如何安全地检查规则,请?填充cmdlet的-ErrorAction参数 Get-NetFirewallRule-DisplayName$name-ErrorAction SilentlyContinue 此时,您可以使用$?测试最后一个命令的结果。如果规则存在,则返回

我正在尝试使用Powershell确定防火墙规则是否存在

如果规则不存在,我会收到一条丑陋的错误消息。如果它确实存在,一切都好:)

如何检查规则是否存在,而不出现任何难看的红色错误消息

例如

错误消息(当规则不存在时)


任何人都知道如何安全地检查规则,请?

填充cmdlet的
-ErrorAction
参数

Get-NetFirewallRule-DisplayName$name-ErrorAction SilentlyContinue

此时,您可以使用
$?
测试最后一个命令的结果。如果规则存在,则返回
$true

或者,您可以使用try/catch块:

try {
  Get-NetFirewallRule -DisplayName blah -ErrorAction Stop
  Write-Host "Rule found"
}
  catch [Exception] {
  write-host $_.Exception.message
}

明亮的我以前从未见过param(我今天才开始学习)。对于基本上所有的
Get XXX
cmdlet,是否存在
-ErrorAction
cmdlet参数?据我所知,它存在于所有cmdlet上。如果您在PowerShell控制台中键入
获取有关\u CommonParameters的帮助,该控制台将显示无处不在的参数列表。非常感谢@arco444-我非常感谢您的帮助:)。。是时候问最后一个PS问题了(在新的SO问题中)…如果您想对非cmdlet的命令执行同样的操作,您可以在执行命令之前将
$ErrorActionPreference
设置为
“SilentlyContinue”
。执行该命令后,您可以将其设置回
Continue
Get-NetFirewallRule : No MSFT_NetFirewallRule objects found with property 'DisplayName' equal to 'Blah Blah Port 44444'.  Verify the value of the property and retry. At C:\projects\xwing\Setup.ps1:67 char:21
+     $existingRule = Get-NetFirewallRule -DisplayName $name
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Blah Blah Port 44444:String) [Get-NetFirewallRule], CimJobException
    + FullyQualifiedErrorId : CmdletizationQuery_NotFound_DisplayName,Get-NetFirewallRule
try {
  Get-NetFirewallRule -DisplayName blah -ErrorAction Stop
  Write-Host "Rule found"
}
  catch [Exception] {
  write-host $_.Exception.message
}