Start-Service
によってスローされた例外をキャッチできないようです。ここに私のコードは次のとおりです。Powershell:サービスを開始できないときに例外をスローします。
try
{
start-service "SomeUnStartableService"
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
私はこれを実行すると、例外がスローされますが捕捉されない:
*Service 'SomeUnStartableService' start failed.
At line:3 char:18
+ start-service <<<< "SomeUnStartableService"
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException
+ FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand*
$ErrorActionPreference
停止するように設定されているので、これは問題になることはありません。
コードをcatch [Exception]
に変更すると、例外がキャッチされ、「ここにあります」が印刷されます。
start-service
はServiceCommandException
などを投げますか?それはあるかのように見えますが、私はそれをキャッチすることはできません!
---編集---
start-service
が例外をスローし、唯一start-service
によってスローされた例外をキャッチしていない場合には理想的には、私は次のように書くと、例外をスローする可能性:
try
{
start-service "SomeUnStartableService"
throw (new-object Exception("service started when expected not to start"))
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
特定の例外を捕まえているのと同じくらい綺麗ではないのは残念ですが、これができないのであれば、次善のことだと思います。 – Jack