new-object psobject添加值

时间:2012-09-04 12:55:17

标签: object powershell

我了解自定义对象是这样创建的:

$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) 

不起作用。

由于

2 个答案:

答案 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