Powershell 如何从arraylist动态创建pscustomobject?

Powershell 如何从arraylist动态创建pscustomobject?,powershell,Powershell,这篇文章是对这篇文章的补充 基本上,我有两个脚本 script1具有以下功能: $exportObject = New-Object System.Collections.ArrayList $exportObject | Select-Object 在script2中,我调用script1做一些事情,并将输出管道化到-ov & "script1.ps1" -ov $outputValue $outputValue 这就是我得到的 我想动态地将$outValue转换为pscusto

这篇文章是对这篇文章的补充

基本上,我有两个脚本

script1具有以下功能:

$exportObject = New-Object System.Collections.ArrayList
$exportObject | Select-Object
在script2中,我调用script1做一些事情,并将输出管道化到
-ov

& "script1.ps1" -ov $outputValue
$outputValue
这就是我得到的

我想动态地将
$outValue
转换为
pscustomobject
,因为西奥的答案(在上面的链接中)需要pscustomobject,而我的
$outValue
是一个数组列表/选择对象

pscustomobject基本上会保存这样的值,但这不是动态的,而是硬编码键/值

$outValue = @(
    [PSCustomObject]@{
        'Server' = 'Server1.com'
        'Cube' = 'Cube1'
        'Connection Details' = 'Connection changed!'
    }
)
我在找这样的东西:

$outValue = $outValue | foreach-object () { @(
    [PSCustomObject]@{
        $key = $value
    }
}
)

这将是高度不稳定的,但在我测试过的几台机器上工作

这将帮助您使用
PSCustomObject
成员创建“动态”数组

$array = @()
Foreach($Object in $exportObject ) {
    $i = -1
    $Goal = -($Object | gm | Where-Object {$_.MemberType -like "noteproperty"}).count

    $temp = New-Object pscustomobject
    Do {
        $temp | Add-Member -MemberType NoteProperty -Name (($Object | gm)[$($i)].Name) -Value ($Object."$(($Object | gm)[$($i)].Name)")
        $i--
    }While($i -ge $Goal)

    $array += $temp
}
这显然不是最好的做法,但根据我的经验,大多数事情都是快速而肮脏地完成的


然后在Theo提供的另一个函数中使用
$array
转换为HTMLTable$array

Theo的答案实际上是PSCustomObject的数组。我想我有一个非常非常愚蠢的方法来做这件事,但我需要先测试一下。这实际上接近于我想要的:),但是因为有-1,-2,-3个对象,它仍然是一种硬编码,你不觉得吗?没有定义实际值很好,但是如果pscustom对象可以将其压缩,以自动识别从$exportObject/$outputValue传入的对象/属性的数量,并根据需要创建对象,它将被更新。实际上,我做这一个更有趣,我甚至可能在某个时候用到它。现在就试试:D,顺便说一句,offtopic,这是一个数组@(),但这叫什么@“”@?嘿,Drew,我刚试过这个,我试过输出$array来测试它,它正在输出值,但是缺少列/标题(服务器、多维数据集、连接详细信息)。有没有办法包括这些?因为如果我实现这个ConvertTo HTMLTable$数组,colun名称是否会丢失?我刚刚将其应用到Theo的函数中,它向我发送了一封电子邮件,其中包含一个漂亮的表:D。此外,列和数据都在那里..尽管奇怪的是,控制台上没有打印列名