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-ItemProperty
和 New-ItemProperty
行。有时命令会抛出非致命错误,并且 catch
不会被调用。为确保您会落入您的 catch
,请添加上述开关。
我正在尝试编写一个简单的 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-ItemProperty
和 New-ItemProperty
行。有时命令会抛出非致命错误,并且 catch
不会被调用。为确保您会落入您的 catch
,请添加上述开关。