从taskkill捕获异常

时间:2018-11-16 17:14:41

标签: powershell

假设我们有一个简单的脚本,该脚本将杀死w3wp.exe的所有正在运行的实例,然后运行iisreset

function KillIis{
    [CmdletBinding()]
    param()

    BEGIN{

    }
    PROCESS{
        Write-Host "Killing w3wp..."
        Try{
            $result = taskkill /f /im w3wp.exe
        }
        Catch{
            Write-Host "No w3wp running..."
        }

        Write-Host "Restarting IIS..."
        cmd.exe /c "iisreset"
    }
    END{}

}

它运行良好,可以完成我需要做的所有事情(只需杀死并重置IIS),但是有时没有正在运行的w3wp实例,因此会产生以下输出:

PS C:\WINDOWS\system32> KillIis
Killing w3wp...
taskkill : ERROR: The process "w3wp.exe" not found.
At E:\Powershell Stuff\KillIIs.ps1:8 char:23
+             $result = taskkill /f /im w3wp.exe
+                       ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (ERROR: The process "w3wp.exe" not found.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Restarting IIS...

Attempting stop...

Internet services successfully stopped

Attempting start...

Internet services successfully restarted

它仍然很好用,但是我想知道是否有一种方法可以catchRemoteException并打印一个友好的错误消息。它是一个非终止异常,因此代码可以继续运行,但是我确实想在发生这种情况时打印一些友好的输出,但是try/catch仅适用于终止异常。

0 个答案:

没有答案
相关问题