Jer*_*ers 0 powershell exception-handling exception powershell-4.0
我正试图询问一些服务信息.有时,应用程序的安装程序无法正确安装,因此注册表不包含服务条目.我想找出哪些安装程序步骤正确执行,即使在安装程序中没有正确登录的系统上也是如此.
如果MyService不存在,catch即使异常处理文档表明裸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
}
Run Code Online (Sandbox Code Playgroud)
为什么这样,我该如何强迫它最终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
Run Code Online (Sandbox Code Playgroud)
强制错误终止:
$key = Get-Item $path -ErrorAction Stop
Run Code Online (Sandbox Code Playgroud)
这样它会抛出并捕获它.
Microsoft官方文档的说明和链接:
-ErrorAction是可以应用于任何PowerShell命令的公共参数-ErrorActionis 的默认值Continue阻止了首先抛出异常.-ErrorAction使用名为的首选项变量配置全局设置$ErrorActionPreference以覆盖此默认值.| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |