如何捕获异常,以使异常消息不会打印在控制台上?

时间:2018-11-29 17:38:42

标签: powershell

我有一个以下cmdlet

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: $_"
  }
}

我的理解是,每当调用Get-WmiObject引发异常时,我的catch块将被执行,然后可以将输出通过管道传输到日志文件。问题是,当我从脚本中调用此cmdlet时,控制台上会显示异常消息。

我不要那个。我希望按照catch块中的实现输出异常详细信息。

你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:3)

我认为问题在于Cmdlet Get-WmiObject不会引发异常,而只是将其错误写入错误流并继续。即,脚本的错误操作行为被设置为“继续”。您可以通过传递给ErrorAction的{​​{1}}参数来控制它:

Get-WmiObject

$wmi = Get-WmiObject -ComputerName $Address -Credential $Credential -Class Win32_Service -Filter "Name='$Name'" -ErrorAction Stop 的stop值表示您希望错误终止(引发异常)。