我有一个以下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块中的实现输出异常详细信息。
你能告诉我怎么做吗?
答案 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值表示您希望错误终止(引发异常)。