PowerShell Try Catch 错误处理函数不显示我的自定义警告消息

PowerShell Try Catch error handling function doesn't show my custom warning message

我正在尝试编写一个简单的 PowerShell 代码来创建一个注册表项,然后使用 TRY 和 CATCH 来 handle/catch 任何可能发生的潜在异常。作为测试场景,如果我修改注册表路径,我希望得到 "Script failed to create the registry key"。不幸的是,TRY/CATCH 错误处理功能对我不起作用,除了错误本身,控制台中什么也没有显示。

$NetBTpath = "HKLM:\System\CurrentControlSet\Services\NetBT\Parameters"
$RegValueName = "NodeType"

Try
{
    if (((Get-ItemProperty $NetBTpath).PSobject.Properties.Name -contains $RegValueName) -ne "True")
    {
        New-ItemProperty -Path $NetBTpath -Name "NodeType" -Value 2  -PropertyType "dword"
    }
}

Catch [System.Exception]
{
Write-warning "Script failed to create the registry key"
}

只要注册表路径正确,它就可以正常工作,但如果我将注册表文件夹...\NetBT\Parameters 重命名为...\NetBT\Parameters1,我只会看到:

Get-ItemProperty : Cannot find path 'HKLM:\System\CurrentControlSet\Services\NetBT\Parameters' because it does not exist. At C:\temp\NetBT_RegConfig222.ps1:10 char:11 + if (((Get-ItemProperty $NetBTpath).PSobject.Properties.Name -cont ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (HKLM:\System\Cu...etBT\Parameters:String) [Get-ItemProperty], ItemNotFoundExcep tion + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

New-ItemProperty : Cannot find path 'HKLM:\System\CurrentControlSet\Services\NetBT\Parameters' because it does not exist. At C:\temp\NetBT_RegConfig222.ps1:12 char:9 + New-ItemProperty -Path $NetBTpath -Name "NodeType" -Value 2 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (HKLM:\System\Cu...etBT\Parameters:String) [New-ItemProperty], ItemNotFoundExcep tion + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.NewItemPropertyCommand

我已经尝试过只使用 Catch {} 以及 Catch [System.Management.Automation.ItemNotFoundException]

请指教

您需要将 -ErrorAction Stop 开关添加到 Get-ItemPropertyNew-ItemProperty 行。有时命令会抛出非致命错误,并且 catch 不会被调用。为确保您会落入您的 catch,请添加上述开关。