首页 > 解决方案 > 如何更新 catch 块中的 Foreach-Object 属性

问题描述

我有一个针对数据数组的 foreach-object 循环,并在命令上执行了 Try/catch。

我正在更新数组中的项目(类似于此)

$arr = @(
    [PSCustomObject]@{Name = "David";  Article = "TShirt"; Error = ""}
    [PSCustomObject]@{Name = "Eduard"; Article = "Trouwsers"; Error = ""}
)

$arr | foreach-object { $_.name += "a"}

要重新创建错误/问题,此测试命令有效

$arr | foreach-object {
    try {
        $createResponse = test-path -type $_.name
    } Catch {
        $_.Error = "Failed"
    }
}

当在 try/catch 中抛出错误时,$_ 对象将成为错误。有没有办法更新 foreach 对象?

在此先感谢您的帮助!

标签: powershell

解决方案


您可以选择使用循环遍历对象foreach并保留$_当前错误实例。

$arr = @(
    [PSCustomObject]@{Name = "David";  Article = "TShirt"; Error = ""}
    [PSCustomObject]@{Name = "Eduard"; Article = "Trouwsers"; Error = ""}
)
foreach ($obj in $arr) {
    try {
        # some code that may produce a terminating error
    } Catch {
        $obj.Error = "Failed"
        $_ # ErrorRecord object
    }
}

在您的catch块中,您可以有一个continue语句来立即处理$arr集合中的下一个项目。您还可以有一个break语句来跳出循环。两者都不是必需的,但可以创造灵活性。

当发生终止错误时,会生成异常。如果这发生在Try脚本块中,它可以被捕获。$_$PSItem将成为脚本块ErrorRecord中捕获的异常的对象。Catch


推荐阅读