1

我知道自定义对象是这样创建的:

$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"}

ETC..

有没有直接的方法来“增加”对象中成员的值?

$obj+=(Name=John) 

不起作用。

谢谢

4

2 回答 2

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
于 2018-08-24T01:08:38.837 回答
0

在上面的示例中,我相信您最终会得到 System.Management.Automation.PSCustomObject,而不是数组。当我构建包含自定义对象的报告时,我会使用类似于您正在做的事情。但是,如果您真的只是使用它来存储一个属性,那可能就有些矫枉过正了。你可以这样做:

$names += "John"
$names += "Fred"

如果您真的想在整个脚本中为对象添加新的注释属性,我就是这样做的。请记住 PowerShell 不喜欢添加具有相同名称的注释属性,因此如果您这样做,您必须简单地使用 = 设置属性

这是我所做的一个例子:

$params += @{Name = $_.Name}
$params += @{Calculation = $someCalculatedValue}
$collection += New-Object -Type PSObject -Property $params
于 2012-09-04T13:21:33.427 回答