我有一个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
}
}