powershell - 如何更新 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 对象?
在此先感谢您的帮助!
解决方案
您可以选择使用循环遍历对象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
推荐阅读
- python - 如何将输入字符串附加到字典键 int 中?
- android - Visual Studio 2015 中的 Xamarin 设计师仅查看黑色
- node.js - 将 JSON 数据从 NodeJS/Express 发送到 EJS 模板时出现问题
- qt - 从属于 Repeater 的 TextField 绑定文本
- excel - How to move shapes along with the cells when sorting by rows in excel
- autotools - 在 `lib_LTLIBRARIES` 中使用配置替换
- c - How to analyze this type of multidimensional array?
- javascript - How can I send data by a form without an input field?
- java - 计算字符串中的大写字母
- unity3d - Unity's IsPointerOverGameObject returning inconsistently