我正在尝试生成类似于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/

10-13 07:52
查看更多