Arrays 迭代PowerShell对象的子属性
大家好,我有一个属性根,它是一个动态属性,可以从(vin1,vin2,vin3,vin4……)变化,甚至可以得到无穷的 现在,当我导出csv时,我需要获得如下输出对象Arrays 迭代PowerShell对象的子属性,arrays,powershell,Arrays,Powershell,大家好,我有一个属性根,它是一个动态属性,可以从(vin1,vin2,vin3,vin4……)变化,甚至可以得到无穷的 现在,当我导出csv时,我需要获得如下输出对象 PS C:\> $array ReadWrite(AllHostsSpecified) : ReadOnly(AllHostsSpecified) : ReadWrite(NegateSpecified) : ReadWrite(Negate) : SecFlavor
PS C:\> $array
ReadWrite(AllHostsSpecified) :
ReadOnly(AllHostsSpecified) :
ReadWrite(NegateSpecified) :
ReadWrite(Negate) :
SecFlavor : sys
ActualPathname :
ReadOnly(AllHosts) :
ReadOnly(Name) :
ReadWrite(Name) :
Anon :
Root : {vin1,vin2,vin3,vin4...}
ReadOnly(NegateSpecified) :
ReadWrite(AllHosts) :
NosuidSpecified : False
Nosuid :
ReadOnly(Negate) :
Pathname : /vol/vin_binaries
有没有办法做到这一点??类似于在for循环中对Root的所有属性进行迭代吗?尝试以下操作:
ReadWrite(AllHostsSpecified) :
ReadOnly(AllHostsSpecified) :
ReadWrite(NegateSpecified) :
ReadWrite(Negate) :
SecFlavor : sys
ActualPathname :
ReadOnly(AllHosts) :
ReadOnly(Name) :
ReadWrite(Name) :
Anon :
Root (Property 1) : vin1
Root (Property 1) : vin2
Root (Property 1) : vin3
Root (Property 1) : vin4
.
.
.
.
Root (Property n) : vinn
ReadOnly(NegateSpecified) :
ReadWrite(AllHosts) :
NosuidSpecified : False
Nosuid :
ReadOnly(Negate) :
Pathname : /vol/vin_binaries
这还显示了原始数组属性(例如“根”)。如果要排除它,需要在函数内部使用
select-exclude…
。但是,这将创建一个新的“pscustomobject”(您将丢失原始的objecttype),因此我没有将其包含在上面的解决方案中。您好,Graimer,谢谢您的回复,但我想立即执行此操作。。有了$arrayYou的输出,你就不能马上完成。PowerShell使用阵列收集多个对象/值。你需要创建一个“过滤器”来完成这项工作。我的是针对您的情况,但转换代码以检测和扩展所有分组属性并不困难。我没有可用的powershell atm来自己转换。忽略第一行,忘记删除它们。要使用数组扩展每个属性,您需要创建一个“过滤器”,使用“get member”获取属性,然后使用ex“Count”仅获取具有数组值的道具,然后使用“我的循环”扩展所有道具。您可以共享如何做到这一点吗?
filter ExpandProperties {
$obj = $_
$obj | gm -MemberType *property | % {
#Find objects with array value
if( @($obj.($_.Name)).Count -gt 1 ) {
$count = 1
$prop = $_.Name
$obj.($prop) | % {
#Foreach value in the property
$obj | Add-Member NoteProperty -Name "$prop (Property $($count))" -Value $_
$count++
}
}
}
#Output object
$obj
}
$o1 = New-Object psobject -Property @{
Name = @("Name1", "Name2")
Root = @("vin1","vin2")
}
$o2 = New-Object psobject -Property @{
Name = "Name2"
Root = @("vin1","vin2","vin3")
}
$o = $o1, $o2
$o | ExpandProperties
Name : {Name1, Name2}
Root : {vin1, vin2}
Name (Property 1) : Name1
Name (Property 2) : Name2
Root (Property 1) : vin1
Root (Property 2) : vin2
Name : Name2
Root : {vin1, vin2, vin3}
Root (Property 1) : vin1
Root (Property 2) : vin2
Root (Property 3) : vin3