arrays - 如何将自定义属性添加到PowerShell数组?

标签 arrays powershell properties pscustomobject

假设我有一个PowerShell数组$Sessions = @(),将用PSCustomObjects填充它。如何向数组本身添加自定义属性?例如。这样我就可以拥有内置的$Sessions.Count和要设置为 Activity session 数的$Sessions.Active

我知道我可以使用以下方式向PSCustomObjects添加属性(以一种肮脏的方式)

$MyCustomObject = "" | Select-Object Machine, UserName, SessionTime

但是尽管在数组上执行此操作不会导致添加属性。

那么我如何实现我的目标呢?有什么方法可以创建自定义数组?

最佳答案

如上所述,您的问题的答案是仅在数组对象上使用Add-Member

Add-Member -InputObject $sessions -MemberType NoteProperty -Name "State" -Value "Fabulous"
创建对象后,向每个元素添加属性是相似的。
$sessions | ForEach-Object{
    $_ | Add-Member -MemberType NoteProperty -Name "State" -Value "Fabulous"
}
这当然带有警告(我忘记了)。来自评论

Beware, though, that appending to that array ($sessions += ...) will replace the array, thus removing the additional property.

Ansgar Wiechers


根据您的用例,还有其他选择可以满足您的需求。您可以将数组元素保存到不同的变量中:
# Check the current object state
$state = $object.Property .....

# Add to the appropriate array.
if($state -eq "Active"){
    $activeSessions += $object
} else {
    $inactiveSessions += $object
}
或者,您仍然可以根据需要存储state属性并使用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()
注意,数组添加了成员​​,然后添加了元素。

关于arrays - 如何将自定义属性添加到PowerShell数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46154845/

相关文章:

C程序只读取第一个车牌

python - 按行连接 3D numpy 数组

powershell - 将涉及 AzureRM 的 powershell 脚本作为 Azure Web 作业运行

delphi - 如何在Delphi中重写继承的类属性?

c# - 在 C# 中使用委托(delegate)作为属性是否正确?

ios - UIViews 应该有属性吗?

ruby - 使用 Ruby 'include?' 方法的性能

python - scikit 认为简单的单向量输入数组不兼容

powershell - Powershell脚本-如果和切换丢失的语句

powershell - 通过 DSC 将 Web 前端、服务后端和 SQL Server 部署到虚拟机?