根据你提出的问题,答案就是在数组对象上使用 Add-Member
命令。
Add-Member -InputObject $sessions -MemberType NoteProperty -Name "State" -Value "Fabulous"
在创建对象之后给每个元素添加属性是类似的。
$sessions | ForEach-Object{
$_ | Add-Member -MemberType NoteProperty -Name "State" -Value "Fabulous"
}
当然,这还有一个警告(我忘了)。来自评论:
不过要注意,将元素附加到该数组($sessions += ...)将替换数组,从而删除附加属性。
Ansgar Wiechers
根据您的用例,有其他选项可以满足您的需求。您可以将数组元素保存到单独的变量中:
$state = $object.Property .....
if($state -eq "Active"){
$activeSessions += $object
} else {
$inactiveSessions += $object
}
或者您仍然可以存储您的状态属性,并根据需要使用Where-Object
进行后处理:
$sessions | Where-Object{$_.State -eq "Active"} | ForEach-Object{}
为避免数组的破坏/重新创建问题,因为它可能会影响性能,您也可以使用一个ArrayList代替。
为避免破坏/重新创建数组的问题,这可能会导致性能降低,您还可以考虑使用ArrayList。
$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()
请注意,该数组已经添加了其成员,然后我们添加了它的元素。
Add-Member -InputObject $sessions ...
?这就是它的作用。 - Matt$sessions += ...
) 将替换该数组,因此删除了额外的属性。更安全的方法是使用具有不同属性的自定义对象来存储数组和状态。话虽如此,根据您想要使用此功能的情况,将添加到列表的属性更改为不同的列表变量$activeSessions
/$inactiveSessions
或将Active
属性添加到单个会话对象可能更合适。 - Ansgar WiechersSelect-Object
,这是阻止我找到解决方案的原因。谢谢。@AnsgarWiechers 感谢你提醒我使用+=
,避免了我误放Add-Member
调用。 - FatalMerlin