假设我们有一个简单的脚本,该脚本将杀死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
它仍然很好用,但是我想知道是否有一种方法可以catch
来RemoteException
并打印一个友好的错误消息。它是一个非终止异常,因此代码可以继续运行,但是我确实想在发生这种情况时打印一些友好的输出,但是try/catch
仅适用于终止异常。