你所说的问题的答案如上所述将只在数组对象上使用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
根据您的使用情况下,有其他的选择,让你想你想要的。您可以保存数组元素为不同的变量:
# 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()
请注意,该数组已添加其成员,然后我们添加了它的元素。
只要使用'添加 - 成员-InputObject $会话...'?这就是 – Matt
要注意的是,附加到该数组('$ sessions + = ...')将替换数组,从而删除附加属性。一个更安全的方法是一个自定义对象,它具有不同的数组和状态属性。有了这个说法,根据你想要使用的内容,使用不同的列表变量'$ activeSessions' /'$ inactiveSessions'可能更合适,而不是将属性添加到列表中,或者添加一个'Active'属性到个别会话对象。 –
@Matt如果你只是想要回答一个问题......我实际上是在懒惰中滥用了“Select-Object”,这让我无法接受我的解决方案。谢谢。 @AnsgarWiechers感谢关于'+ ='的提示,帮我省略了错误的Add-Member调用。 – FatalMerlin