如何从arraylist动态创建pscustomobject?

时间:2019-07-03 22:16:40

标签: powershell

此帖子是对该主题here的补充

基本上,我有2个脚本

script1具有以下内容:

$exportObject = New-Object System.Collections.ArrayList
$exportObject | Select-Object

在script2中,我正在调用script1做某事并将输出传递到-ov

& "script1.ps1" -ov $outputValue
$outputValue

这就是我得到的

op

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

基本上,pscustomobject将保存这样的值,但这不是动态的,而是对键/值进行硬编码。

$outValue

我正在寻找这样的东西:

$outValue = @(
    [PSCustomObject]@{
        'Server' = 'Server1.com'
        'Cube' = 'Cube1'
        'Connection Details' = 'Connection changed!'
    }
)

1 个答案:

答案 0 :(得分:1)

这将非常不稳定,但可以在我测试过的多台计算机上工作。

这应该可以帮助您创建具有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中使用ConvertTo-HTMLTable $array