Powershell 如何从arraylist动态创建pscustomobject?
这篇文章是对这篇文章的补充 基本上,我有两个脚本 script1具有以下功能: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
$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。此外,列和数据都在那里..尽管奇怪的是,控制台上没有打印列名