我正在尝试编写一个简单的PowerShell代码来创建注册表项,然后使用TRY和CATCH来处理/捕获可能发生的任何潜在异常。作为测试方案,如果我修改注册表路径,我希望得到"脚本无法创建注册表项"。不幸的是,TRY/CATCH 错误处理功能对我不起作用,除了错误本身之外,控制台中没有任何内容显示。
$NetBTpath = "HKLM:SystemCurrentControlSetServicesNetBTParameters"
$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\参数为...\NetBT\参数1,我只会看到:
Get-ItemProperty : 找不到路径"HKLM:\System\CurrentControlSet\Services\NetBT\Parameters",因为它不存在。 在 C:\temp\NetBT_RegConfig222.ps1:10 字符:11 + if (((Get-ItemProperty $NetBTpath(.PSobject.Properties.Name -续... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 分类信息 : ObjectNotFound: (HKLM:\System\Cu...etBT\Parameters:String( [Get-ItemProperty], ItemNotFoundExcep 天 + FullQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand
New-Item属性:找不到路径"HKLM:\System\CurrentControlSet\Services\NetBT\Parameters",因为它不存在。 在 C:\temp\NetBT_RegConfig222.ps1:12 字符:9 + 新项目属性 -路径 $NetBTpath -名称"节点类型" -值 2 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 分类信息 : ObjectNotFound: (HKLM:\System\Cu...etBT\Parameters:String( [New-ItemProperty], ItemNotFoundExcep 天 + FullQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Command.NewItemPropertyCommand
我已经尝试仅使用Catch {}
和Catch [System.Management.Automation.ItemNotFoundException]
.
请指教。
您需要将-ErrorAction Stop
开关添加到Get-ItemProperty
和New-ItemProperty
行。 有时,命令会引发非致命错误,并且不会调用catch
。 为了确保您落入您的catch
,添加上述开关。