如何获得一个PsCustomObject的名称?



我有一个powershell脚本,其中包括很多这样的PsCustomObjects(名称没有特定的模式):

$myObject1 = [PSCustomObject]@{
Name     = 'Kevin'
State    = 'Texas'
}
$myObject2 = [PSCustomObject]@{
Name     = 'Peter'
Lastname = 'Fonda'
State    = 'Florida'
}

现在我需要通过编程将其转换为以下对象格式,以拥有一个全局哈希表:

$result = @{
'myObject1.Name'     = 'Kevin'
'myObject1.State'    = 'Texas'
'myObject2.Name'     = 'Peter'
'myObject2.Lastname' = 'Fonda'
'myObject2.Sate'     = 'Florida'
}

对于这个任务,我需要一个循环,在这个循环中我可以读取每个PsCustomOject的名称,或者我需要将所有对象的名称指定为字符串数组,并查找具有匹配名称的对象属性。

循环构造函数可以是这样的:

$result = @{}
foreach($name in @('myObject1','myObject2')) {
$obj = myMissingFunction1 $name
foreach($p in $obj.PsObject.Properties) {
$result["$name.$($p.Name)"] = $p.Value
}
}

$result = @{}
foreach($obj in @($myObject1, $myObject2)) {
$name = myMissingFunction2 $obj
foreach($p in $obj.PsObject.Properties) {
$result["$name.$($p.Name)"] = $p.Value
}
}

不幸的是,我不能把这两种方法中的任何一种带入生活。有人能帮帮我吗?

你可以这样做。

$Result = [Ordered]@{}
$index = 0
Foreach ($obj in $ArrayOfObject) {
foreach ($prop in ($obj | Get-Member -MemberType NoteProperty).Name) {
$Result."SomeObject$Index.$Prop" = $obj.$prop
}
$index += 1

}

结果

Name                           Value
----                           -----
SomeObject0.Name               Kevin
SomeObject0.State              Texas
SomeObject1.Lastname           Fonda
SomeObject1.Name               Peter
SomeObject1.State              Florida

本例使用的数据集

$ArrayOfObject = @(
[PSCustomObject]@{
Name  = 'Kevin'
State = 'Texas'
}
[PSCustomObject]@{
Name     = 'Peter'
Lastname = 'Fonda'
State    = 'Florida'
}
)

终于解决了。我完全忘记了Get-Variable"功能:

$result = @{}
foreach($name in @('myObject1','myObject2')) {
$obj = (Get-Variable $name).Value
foreach($p in $obj.PsObject.Properties) {
$result["$name.$($p.Name)"] = $p.Value
}
}

最新更新