我有这样的想法,即从 2 个单独的函数中获取输出,这些函数将 aPSCustomObject
作为list返回,并将它们格式化为一个表。我的问题很简单......我不知道该怎么做。哈哈
通过我尝试的各种组合,这给了我一些有希望的结果:
$Var1 = [PSCustomObject]@{
UserName = $env:USERNAME
Stuff1 = 'stuff1'
} | Format-List | Out-String -Stream
$Var2 = [PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
Stuff2 = 'stuff2'
} | Format-List | Out-String -Stream
[PSCustomObject]@{
TableOne = $Var1.Trim().Foreach({$_})
TableTwo = $Var2.Trim()
} | Format-Table -AutoSize
输出:
TableOne TableTwo
-------- --------
{, , UserName : Abraham, Stuff1 : stuff1...} {, , ComputerName : DESKTOP-OEREJ77, Stuff2 : stuff2...}
我说承诺它显示了$var1
和 2 的实际内容,而我的其他尝试没有。我还把.foreach()
操作员留在那里,以展示我试图让它发挥作用的许多不同技巧之一。有那么一瞬间,我以为Out-String
cmdlet 可以帮我解决问题,但没有成功。
有没有人做过类似的事情?
编辑: 没关系,我想通了。
使用for
循环遍历每一行,一次分配PSCustomObject
一个。还使用.Where()
运算符去除空格,并比较两个数组以找到最大的数以将其用作计数。
$Var1 = $([PSCustomObject]@{
UserName = $env:USERNAME
Stuff1 = 'stuff1'
} | Format-List | Out-String -Stream).Where{$_ -ne ''}
$Var2 = $([PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
Stuff2 = 'stuff2'
ExtraStuff = 'More'
} | Format-List | Out-String -Stream).Where{$_ -ne ''}
$Count = ($Var1.Count, $Var2.Count | Measure-Object -Maximum).Maximum
$(for($i=0;$i -lt $Count; $i++) {
[PSCustomObject]@{
TableOne = $Var1[$i]
TableTwo = $Var2[$i]
}
}) | Format-Table -AutoSize
输出:
TableOne TableTwo
-------- --------
UserName : Abraham ComputerName : DESKTOP-OEREJ77
Stuff1 : stuff1 Stuff2 : stuff2
ExtraStuff : More