arrays - 从 Select-Object 启动一个数组
问题描述
我正在尝试生成一个输出字符串,例如Item1, Item2
,用逗号分隔符连接。我们通过在Select-Object -Property
.
检查此代码:
$Test = @(
[PSCustomObject]@{
Name = 'Test'
}
[PSCustomObject]@{
Name = 'Test2'
}
) | Select-Object -Property @{N = 'Problem'; E = { @() } },
@{N = 'EmployeeType'; E = { $null } }, *
foreach ($R in $Test) {
$R.Problem += 'Item1'
$R.Problem += 'Item2'
}
$Test | Select-Object -Property @{Name = 'Problem'; Expression = { $_.Problem -join "; " } }, * -ExcludeProperty Problem | fl
结果:
Problem : Item1Item2
Name : Test
Problem : Item1Item2
Name : Test2
为什么属性Problem
连接为 aString
而不是 a Array
?如何将其转换为Array
?
解决方案
在计算属性的表达式中实例化一个空数组@()
是不够的,因为 PowerShell 会将其展平并且它将变为 $null。
,@()
改为使用
$Test = @(
[PSCustomObject]@{
Name = 'Test'
}
[PSCustomObject]@{
Name = 'Test2'
}
) | Select-Object -Property @{N = 'Problem'; E = { ,@() } },
@{N = 'EmployeeType'; E = { $null } }, *
foreach ($R in $Test) {
$R.Problem += 'Item1'
$R.Problem += 'Item2'
}
$Test | Select-Object -Property @{Name = 'Problem'; Expression = { $_.Problem -join "; " } }, * -ExcludeProperty Problem | fl
回报:
Problem : Item1; Item2 EmployeeType : Name : Test Problem : Item1; Item2 EmployeeType : Name : Test2
推荐阅读
- .net - 无法理解 .net 中同步上下文的目的
- angular - Angular Material Date Picker - 根据外部 API 调用禁用日期
- kotlin - 致命异常:主要:okhttp3.RealCall.execute
- c++ - 为什么单行注释中的换页和垂直制表符的处理方式不同?
- javascript - 通过 jquery 获取和设置图片 URL
- android - FAB的颜色什么时候依赖colorAccent?
- swift - iOS Swift WebRTC - 无法设置远程报价 sdp:无法设置远程视频描述发送参数
- python-3.x - tktable模块安装问题。_tkinter.TclError:无效的命令名称“表”
- java - 从 Java 中的多模块项目生成数据流模板
- csv - 仅导入更新的列谷歌脚本