我了解自定义对象是这样创建的:
$obj=new-object psobject
然后我明白你可以像这样添加成员(和值):
$obj | Add-Member noteproperty name Jeff
现在问题是,如何填充对象,添加和删除值的“行”?
我发现的唯一方法是创建一个数组,然后在其中推送对象,如下所示:
$array = @()
$array+=new-object PSObject -Property @{Name="Jeff"}
$array+=new-object PSObject -Property @{Name="Joe"}
$array+=new-object PSObject -Property @{Name="John"}
等。
是否有直接的方法来“增加”对象中成员的值?
$obj+=(Name=John)
不起作用。
由于
答案 0 :(得分:1)
反应很晚,但是我希望它能帮助需要计数对象的人。
让我们从我们希望计数的用户列表开始。
> $users = 1..10 | % {New-object psobject -Property @{ Name = "User $_"; Age = $_ } }
> $users
Age Name
--- ----
1 User 1
2 User 2
3 User 3
4 User 4
5 User 5
6 User 6
7 User 7
8 User 8
9 User 9
10 User 10
要对其进行计数,请将其放入计数器的哈希表
> # Create hash table
> $counter = @{}
> # Assign users as keys in the table
> $users | % { $counter.Add($_, 0) }
> $counter
Name Value
---- -----
@{Age=4; Name=User 4} 0
@{Age=1; Name=User 1} 0
@{Age=3; Name=User 3} 0
@{Age=5; Name=User 5} 0
@{Age=10; Name=User 10} 0
@{Age=9; Name=User 9} 0
@{Age=8; Name=User 8} 0
@{Age=7; Name=User 7} 0
@{Age=6; Name=User 6} 0
@{Age=2; Name=User 2} 0
然后,您可以在遇到任何问题时增加计数器 您脚本中的用户。例如,将“用户1”增加两次 和“用户4”一次
> $counter[$users[0]] += 1
> $counter[$users[0]] += 1
> $counter[$users[3]] += 1
> $counter
Name Value
---- -----
@{Age=4; Name=User 4} 1
@{Age=1; Name=User 1} 2
@{Age=3; Name=User 3} 0
@{Age=5; Name=User 5} 0
@{Age=10; Name=User 10} 0
@{Age=9; Name=User 9} 0
@{Age=8; Name=User 8} 0
@{Age=7; Name=User 7} 0
@{Age=6; Name=User 6} 0
@{Age=2; Name=User 2} 0
答案 1 :(得分:0)
在上面的示例中,我相信您最终得到的是System.Management.Automation.PSCustomObject,而不是数组。当我构建包含自定义对象的报表时,我会使用与您正在执行的操作类似的操作。如果你真的只是用它来存储一个房产,那么它可能有点过分。你可以这样做:
$names += "John"
$names += "Fred"
如果你真的想在整个脚本中为对象添加新的音符属性,我就是这样做的。请记住,PowerShell不喜欢添加具有相同名称的注释属性,因此如果您这样做,则只需使用=
设置属性以下是我所做的一个例子:
$params += @{Name = $_.Name}
$params += @{Calculation = $someCalculatedValue}
$collection += New-Object -Type PSObject -Property $params