无法显示 PSObject
Can't display PSObject
我试图在 PSObject 中显示我的脚本生成的一些数据,这样我就可以导出到 CSV,但唯一显示的对象是我首先添加到数组中的对象。
$pass=@("1","2","3")
$fail=@("4")
$obj=@()
$pass | % {
$obj+=New-Object PSObject -Property @{Pass=$_}
}
$fail | % {
$obj+=New-Object PSObject -Property @{Fail=$_}
}
$obj
我也试过这个,但我在 table 中得到一个空行,其中值不在该列中,我不想要这样:
$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。
正如您自己发现的那样,PowerShell 仅输出数组中第一项 的属性。它并非设计 来以您使用它的方式打印您期望的输出。
作为解决方法,您可以使用 for
循环来 "build" 您想要的输出:
$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
另一个答案是正确的 - 你使用的对象是错误的。话虽这么说,这里有一个功能可以帮助您错误地使用它们!
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"
我试图在 PSObject 中显示我的脚本生成的一些数据,这样我就可以导出到 CSV,但唯一显示的对象是我首先添加到数组中的对象。
$pass=@("1","2","3")
$fail=@("4")
$obj=@()
$pass | % {
$obj+=New-Object PSObject -Property @{Pass=$_}
}
$fail | % {
$obj+=New-Object PSObject -Property @{Fail=$_}
}
$obj
我也试过这个,但我在 table 中得到一个空行,其中值不在该列中,我不想要这样:
$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。
正如您自己发现的那样,PowerShell 仅输出数组中第一项 的属性。它并非设计 来以您使用它的方式打印您期望的输出。
作为解决方法,您可以使用 for
循环来 "build" 您想要的输出:
$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
另一个答案是正确的 - 你使用的对象是错误的。话虽这么说,这里有一个功能可以帮助您错误地使用它们!
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"