我正在尝试生成类似于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
属性连接为String
而不是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
返回值:
关于arrays - 从选择对象启动数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56686934/