Как отловить исключение, чтобы сообщение об исключении не выводилось на консоль? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующий командлет

function Service-Stop
{
  [cmdletbinding()]
  param(
  [Parameter(Mandatory=$true)][ValidateScript({$_ -match [IPAddress]$_ })][string]$Address,
  [Parameter(Mandatory=$true)][string]$Name,
  [Parameter(Mandatory=$true)][System.Management.Automation.PSCredential]$Credential
  )

  try
  {
    $wmi = Get-WmiObject -ComputerName $Address -Credential $Credential -Class Win32_Service -Filter "Name='$Name'"
    if($wmi)
    {
      $wmi.stopservice()
    }
  }
  catch
  {
    Write-Output "ErrorDetails: $_"
  }
}

Насколько я понимаю, всякий раз, когда при вызове * 1004 выдается исключение, мой блок catch будет выполняться, и я затем смогу направить вывод в файл журнала.Проблема в том, что когда я вызываю этот командлет из моего скрипта, на консоли отображается сообщение об исключении.

Я не хочу этого.Я хочу, чтобы информация об исключении выводилась как реализовано в блоке catch.

Можете ли вы сказать мне, как это сделать?

1 Ответ

0 голосов
/ 29 ноября 2018

Я считаю, что проблема в том, что командлет Get-WmiObject не выдает исключение, а просто записывает свою ошибку в поток ошибок и продолжает.То есть поведение действия сценария с ошибкой установлено на «продолжить».Вы можете управлять этим с помощью параметра ErrorAction, который вы передаете Get-WmiObject:

$wmi = Get-WmiObject -ComputerName $Address -Credential $Credential -Class Win32_Service -Filter "Name='$Name'" -ErrorAction Stop

Значение остановки ErrorAction указывает, что вы хотите, чтобы ошибка завершилась (с помощью исключения).

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