The answer to your question as stated would be to just use Add-Member on the array object.
Add-Member -InputObject $sessions -MemberType NoteProperty -Name "State" -Value "Fabulous"
Adding a property to each element after you created the object is similar.
$sessions | ForEach-Object{
$_ | Add-Member -MemberType NoteProperty -Name "State" -Value "Fabulous"
}
This of course comes with a warning (that I forgot about). From comments
Beware, though, that appending to that array ($sessions += ...) will replace the array, thus removing the additional property.
Ansgar Wiechers
Depending on your use case there are other options to get you want you want. You can save array elements into distinct variables:
# Check the current object state
$state = $object.Property .....
# Add to the appropriate array.
if($state -eq "Active"){
$activeSessions += $object
} else {
$inactiveSessions += $object
}
Or you could still store your state property and post process with Where-Object as required:
# Process each inactive session
$sessions | Where-Object{$_.State -eq "Active"} | ForEach-Object{}
To avoid the destroying / recreating array issue, which can be a performance hog, you could also use an array list instead.
$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()
Notice that the array had its member added then we added its elements.
Add-Member -InputObject $sessions ...? That is what it is for$sessions += ...) will replace the array, thus removing the additional property. A safer approach would be a custom object with distinct properties for array and state. With that said, depending on what you want to use this for it might be more appropriate to use different list variables$activeSessions/$inactiveSessionsinstead of adding a property to the list, or to add anActiveproperty to the individual session objects.Select-Objectout of laziness which was what kept me from my solution. Thanks. @AnsgarWiechers thanks for the hint about+=, saved me from misplacing theAdd-Membercall.Selectyou did is a perfectly acceptable method of creating a blank slate object. To each there own in this regard. The only setback from your method is in how basic it can be for things like types and complex properties. Still nothing wrong with it.