我有一个 powershell 脚本,可以关闭 MS Word 中打开的文件名与模式匹配的所有 MS Word 实例。有时会调用 Powershell 脚本,但没有运行 MS Word 实例。cmdlet Get-Process 用于查找 MS Word 并检查当前打开的文件的名称。
无论是 [NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand] 还是
[Microsoft.PowerShell.Commands.GetProcessCommand] 都被捕获。
{
$MSWordProcessHandle = Get-Process WINWORD
} catch [NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand] {
Write-Output "No instances of MS Word found running."
}
Run Code Online (Sandbox Code Playgroud)
我不断收到下面的错误。
Run Code Online (Sandbox Code Playgroud)Get-Process : Cannot find a process with the name "WINWORD". Verify the process name and call the cmdlet again. At C:\Utils\scripts\Dev_Set_Close.ps1:24 char:27 + $MSWordProcessHandle = Get-Process WINWORD + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (WINWORD:String) [Get-Process], ProcessCommandException + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
首先,您需要使用-ErrorAction Stop强制非终止错误成为异常。
然后,当您无法弄清楚要捕获哪些特定异常时,Lee 捕获所有内容的建议会很有帮助:
try {
$MSWordProcessHandle = Get-Process WINWORD -ErrorAction Stop
} catch {
$_.Exception.GetType().FullName
}
Run Code Online (Sandbox Code Playgroud)
这输出Microsoft.PowerShell.Commands.ProcessCommandException
所以,这就是你想要的:
try {
$MSWordProcessHandle = Get-Process WINWORD -ErrorAction Stop
} catch [Microsoft.PowerShell.Commands.ProcessCommandException]{
Write-Output "No instances of MS Word found running."
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |