如前所述,您的问题的答案是仅Add-Member
在数组对象上使用。
Add-Member -InputObject $sessions -MemberType NoteProperty -Name "State" -Value "Fabulous"
在创建对象后向每个元素添加属性是类似的。
$sessions | ForEach-Object{
$_ | Add-Member -MemberType NoteProperty -Name "State" -Value "Fabulous"
}
这当然带有警告(我忘记了)。来自评论
但请注意,附加到该数组 ($sessions += ...) 将替换该数组,从而删除附加属性。
安斯加维切斯
根据您的用例,还有其他选项可以满足您的需求。您可以将数组元素保存到不同的变量中:
# Check the current object state
$state = $object.Property .....
# Add to the appropriate array.
if($state -eq "Active"){
$activeSessions += $object
} else {
$inactiveSessions += $object
}
或者您仍然可以Where-Object
根据需要存储您的状态属性和发布流程:
# Process each inactive session
$sessions | Where-Object{$_.State -eq "Active"} | ForEach-Object{}
为避免破坏/重新创建数组问题,这可能会导致性能消耗,您也可以使用数组列表来代替。
$myArray = New-Object System.Collections.ArrayList
Add-Member -InputObject $myArray -MemberType ScriptMethod -Name "NeverTellMeTheOdds" -Value {
$this | Where-Object{$_ % 2 -ne 0}
}
$myArray.AddRange(1..10)
$myArray.NeverTellMeTheOdds()
请注意,数组添加了它的成员,然后我们添加了它的元素。