无法显示PSObject

时间:2016-09-20 12:09:19

标签: powershell powershell-v2.0

我正在尝试显示我的脚本在PSObject中生成的一些数据,因此我可以导出为CSV,但显示的唯一对象是我首先添加到数组中的那个。

$pass=@("1","2","3")
$fail=@("4")
$obj=@()
$pass | % {
    $obj+=New-Object PSObject -Property @{Pass=$_}
}
$fail | % {
    $obj+=New-Object PSObject -Property @{Fail=$_}
}
$obj

我也尝试了这个,但是我在表格中显示一个空白行,其中的值不在该列中,我不想要:

$pass=@("1","2","3")
$fail=@("4")
$obj=@()
$pass | % {
    $obj+=New-Object PSObject -Property @{Pass=$_;Fail=""}
}
$fail | % {
    $obj+=New-Object PSObject -Property @{Pass="";Fail=$_}
}
$obj

我想要的结果:

Pass    Fail
----    ----
1       4
2
3

我正在使用Powershell V2。

2 个答案:

答案 0 :(得分:2)

另一个答案是对的 - 你正在使用错误的对象。话虽这么说,这是一个帮助你错误使用它们的功能!

Function New-BadObjectfromArray($array1,$array2,$array1name,$array2name){
    if ($array1.count -ge $array2.count){$iteratorCount = $array1.count}
    else {$iteratorCount = $array2.count}
    $obj = @()
    $iteration=0
    while ($iteration -le $iteratorCount){
        New-Object PSObject -Property @{
            $array1name=$array1[$iteration]
            $array2name=$array2[$iteration]
        }
        $iteration += 1
    }
    $obj
}

$pass=@("1","2","3")
$fail=@("4")

New-BadObjectfromArray -array1 $fail -array2 $pass -array1name "Fail" -array2name "Pass"

答案 1 :(得分:0)

正如您自己想出的那样,PowerShell仅输出数组中第一项的属性。 未设计打印您正在使用它的方式所期望的输出。

作为一种解决方法,您可以使用for循环来构建"你想要的输出:

$pass=@("1","2","3")
$fail=@("4")
$obj=@()

for ($i = 0; $i -lt $pass.Count; $i++)
{
    if ($fail.Count -gt $i)
    {
        $currentFail = $fail[$i]
    }
    else
    {
        $currentFail = ""
    }

    $obj+=New-Object PSObject -Property @{Fail=$currentFail;Pass=$pass[$i];}
}
$obj | select Pass, Fail

<强>输出:

Pass Fail
---- ----
1    4   
2        
3