0

いくつかのサービスを検索し、存在する場合は削除するpowershellスクリプトをほぼ完成させました。私の問題は、Get-Service存在しないサービスで使用すると例外がスローされることです。より正確にはServiceCommandException. スクリプトでブロックを使用しましtry-catchたが、ログ ファイルでは次のように不平を言っています。

CAQuietExec:  The Try statement is missing its Catch or Finally block.
CAQuietExec:  At C:\Program Files (x86)\test\Uninstall.ps1:24 char:2
CAQuietExec:  +      <<<< catch 
CAQuietExec:      + CategoryInfo          : ParserError: (:) , ParseException
CAQuietExec:      + FullyQualifiedErrorId : MissingCatchOrFinally
CAQuietExec:   
CAQuietExec:  Error 0x80070001: Command line returned an error.
CAQuietExec:  Error 0x80070001: CAQuietExec Failed

私のスクリプトは次のようになります。

$matcherId=1
do 
{
    $matcherIdAsString = [string]$matcherId 
    $matcher = "MatchingServer"+$matcherIdAsString

    try 
    {
        $matcher_service = get-service $matcher
        if($matcher_service -ne $null) 
        { 
            write-host $matcher" is alive"
            $serviceObj =(Get-WmiObject Win32_Service -filter "name='$matcher'")
            if($serviceObj -ne $null) {
                $serviceObj.Delete()
            }
        }
        else 
        {
            write-host "MatchingServer"$matcherIdAsString" is not alive."
        }
    }   
    catch[Microsoft.PowerShell.Commands.ServiceCommandException] 
    {
        write-host "Exception is thrown"
        $error.clear()  
    }
    finally 
    {
        $matcherId++
    }
}
while($matcherId -lt 31)

例外が処理されている理由がわかりませんか? ここで何が間違っていますか?

4

1 に答える 1

1

サービスが見つからない場合のエラーを回避するには、次を試してください。

$matcher_service = get-service $matcher -ea silentlycontinue

例外はスローされません

于 2013-05-22T17:30:48.613 に答える