Подавление вывода из команды Powershell - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь обработать правила брандмауэра в сценарии PowerShell - вот строка, которую я использую:

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

Так что это отлично работает, если оно возвращает какие-либо правила, возвращает какую-то коллекцию которые хранятся в $ currentRules. Все хорошо.

проблема возникает, если get-netfirewallrule не находит совпадений - я получаю полезный

    get-netfirewallRule : computer4: No MSFT_NetFirewallRule objects found with property 'Direction' equal to 'Inbound'.  Verify the value of the property and retry.
At line:1 char:1
+ get-netfirewallRule -CimSession computer4 -direction Inbound | ou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Inbound:Direction) [Get-NetFirewallRule], CimJobException
    + FullyQualifiedErrorId : CmdletizationQuery_NotFound_Direction,Get-NetFirewallRule
    + PSComputerName        : computer4

в середине вывода. Пробовал обычные > $ null и | out-null , но результат все равно остается на моем экране. Есть идеи, как я могу остановить отображение этого «полезного» сообщения?

спасибо,

Джим

Ответы [ 3 ]

2 голосов
/ 10 июля 2020

Питер Шнайдер полезный ответ правильный, хотя вы обычно используете его, когда вам нужен набор ошибок для большего количества командлетов. Если вы хотите подавить вывод ошибок только для этой одной команды, вы также можете сразу указать для нее параметр -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». В этих случаях вы также можете использовать блок a 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 голос
/ 10 июля 2020

Вы можете установить для переменной $ ErrorActionPreference значение «SilentlyContinue»

$eap = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"
1/0
$ErrorActionPreference = $eap
0 голосов
/ 10 июля 2020

Использование конструкции Try / Catch позволяет вам перехватывать ошибки и обрабатывать их, предотвращая появление нежелательных сообщений об ошибках в вашем выводе.

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

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

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...