如何在powershell中处理失败的变量分配?

如何在powershell中处理失败的变量分配?,powershell,error-handling,Powershell,Error Handling,我正在尝试从注册表项设置PowerShell变量 因此,我使用try{}catch{}来消除密钥不存在时的最终错误。然而,我仍然在控制台上得到错误输出 $ZZ_ConVTL=try{(获取项目属性-路径“HKCU:\Console”-名称VirtualTerminalLevel.VirtualTerminalLevel}捕获{“N/A”} ... #输出: Get-ItemProperty:路径HKEY_CURRENT_USER\Console中不存在属性VirtualTerminalLevel

我正在尝试从注册表项设置PowerShell变量

因此,我使用
try{}catch{}
来消除密钥不存在时的最终错误。然而,我仍然在控制台上得到错误输出

$ZZ_ConVTL=try{(获取项目属性-路径“HKCU:\Console”-名称VirtualTerminalLevel.VirtualTerminalLevel}捕获{“N/A”}
...
#输出:
Get-ItemProperty:路径HKEY_CURRENT_USER\Console中不存在属性VirtualTerminalLevel。
在C:\Users\Administrator\Documents\xxxx\xxxx.ps1:181 char:32
+ ...    = 尝试{(获取ItemProperty-path“HKCU:\Console”-name virtualtemi。。。
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:InvalidArgument:(VirtualAlterMinalLevel:String)[Get ItemProperty],pArgumentException
+FullyQualifiedErrorId:System.Management.Automation.pArgumentException,Microsoft.PowerShell.Commands.GetItemPropertyCommand

如何处理并避免此错误出现在控制台中?您的
Get ItemProperty
调用发出的是非终止错误,而
try
/
catch
仅捕获终止错误。

  • 非终止错误比终止错误更常见
使用
-ErrorAction Stop
将cmdlet生成的(第一个)非终止错误升级为一个终止错误,该错误由
try
/
catch
处理

您通常可以通过设置首选项变量来实现相同的效果
$ErrorActionPreference='Stop'
但请注意,这样做对调用外部程序和在模块中实现的函数没有影响


另见:

  • 帮助主题

  • 在命令编写者关于何时发出终止错误与非终止错误的指南上下文中,对基本错误类型的描述

  • PowerShell异常复杂的错误处理的全面概述:


您的
Get ItemProperty
调用发出的是非终止错误,而
try
/
catch
仅捕获终止错误。

  • 非终止错误比终止错误更常见
使用
-ErrorAction Stop
将cmdlet生成的(第一个)非终止错误升级为一个终止错误,该错误由
try
/
catch
处理

您通常可以通过设置首选项变量来实现相同的效果
$ErrorActionPreference='Stop'
但请注意,这样做对调用外部程序和在模块中实现的函数没有影响


另见:

  • 帮助主题

  • 在命令编写者关于何时发出终止错误与非终止错误的指南上下文中,对基本错误类型的描述

  • PowerShell异常复杂的错误处理的全面概述: