基本上我正在尝试将一个对象和一些值存储在另一个对象中。这可能吗?我试着这样做:
$testingobject = New-Object PSOBject
$testingobject2 = New-Object PSOBject
$testingobject2 | Add-Member -MemberType NoteProperty -name "test" -value "test"
$testingobject | Add-Member -MemberType MemberSet -name "test2" -Value $testingobject2
错误消息是:
Add-Member : Cannot convert value "@{test=test}" to type
"System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSMemberInfo]". Error: "Cannot
convert the "@{test=test}" value of type "System.Management.Automation.PSCustomObject" to type
"System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSMemberInfo]"."
At line:1 char:19
+ $testingobject | Add-Member -MemberType MemberSet -name "test2" -Value $testing ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Add-Member], PSInvalidCastException
+ FullyQualifiedErrorId : InvalidCastConstructorException,Microsoft.PowerShell.Commands.AddMemberCommand
我该怎么做?
答案 0 :(得分:0)
如果要使用属性创建新对象,可以使用New-Object
cmdlet和-Property
参数轻松执行此操作,您可以使用属性传递散列表。
$myObject = New-Object PSObject -Property @{
Property1 = "MyValue"
Property2 = New-Object PSObject -Property @{
SubProperty1 = "AnotherValue"
}
}
如果要使用Add-Member
添加新属性,则应该使用NoteProperty
成员类型。您可以在有关PSMemberTypes Enumeration
$myObject | Add-Member -Name Property3 -MemberType NoteProperty -Value (New-Object PSObject -Property @{
SubProperty2 = "YetAnotherValue"
})
要测试此对象,我们可以使用以下内容:
$myObject.Property1
$myObject.Property2.SubProperty1
$myObject.Property3.SubProperty2
这将产生以下输出:
myvalue的
AnotherValue
YetAnotherValue
如果需要,我们还可以使用具有其他子属性的对象替换属性中的一个对象:
$myObject.Property2 = New-Object PSObject -Property @{
SubProperty3 = "A fourth value"
}
$myObject.Property2.SubProperty3
哪会产生:
第四个值
答案 1 :(得分:0)
是的,只需更改" MemberSet"到" NoteProperty"在你的最后一行。
如果您使用PowerShell v2或更高版本,则可以在一行中执行此操作:
$testingobject = New-Object -TypeName PSObject -Property @{ test2 = (New-Object -TypeName PSObject -Property @{test = "test"}) }