如何捕捉异常,使异常消息不打印在控制台上



我有以下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块中实现时输出。

你能告诉我怎么做吗?

我认为问题在于CmdletGet-WmiObject没有抛出异常,只是将其错误写入错误流并继续。也就是说,脚本的错误操作行为设置为"continue"。您可以通过传递给Get-WmiObject:的ErrorAction参数进行控制

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

值为stop的ErrorAction表示您希望终止错误(通过抛出异常(。