为什么异常没有让我进入catch块?

时间:2017-10-26 08:54:03

标签: powershell exception exception-handling powershell-v4.0

我正在尝试查询某些服务信息。有时,应用程序的安装程序无法正确安装,因此注册表不包含服务条目。我想知道哪些安装程序步骤已正确执行,即使在安装程序中没有正确登录的系统上也是如此。

如果MyService不存在,则下面的脚本不会转到catch块,即使exception handling documentation建议裸catch就足够了:

try {
    $path = 'hklm:\SYSTEM\CurrentControlSet\services\MyService'
    $key = Get-Item $path
    $namevalues = $key | Select-Object -ExpandProperty Property |
        ForEach-Object {
        [PSCustomObject] @{
            Name = $_;
            Value = $key.GetValue($_)
        }
    }
    $namevalues | Format-Table
}
catch {
    $ProgramFilesX86 = [System.Environment]::GetFolderPath("ProgramFilesX86");
    $ProgramFiles = [System.Environment]::GetFolderPath("ProgramFiles");
    Write-Host $ProgramFilesX86
    Write-Host $ProgramFiles
}

为什么会这样,我应该如何强迫它最终进入catch

这是PowerShell输出的内容:

Get-Item : Cannot find path 'HKLM:\SYSTEM\CurrentControlSet\services\MyService' because it does not exist.
At C:\Users\Developer\...\GetMyServiceInfo.ps1:17 char:12
+     $key = Get-Item $path
+            ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (HKLM:\SYSTEM\Cu...vices\MyService:String) [Get-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand

1 个答案:

答案 0 :(得分:6)

强制错误终止:

$key = Get-Item $path -ErrorAction Stop

这样它会抛出并捕获它。

Microsoft官方文档的说明和链接: