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

等..

オブジェクトのメンバーの値を「インクリメント」する簡単な方法はありますか?

$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」を2回インクリメントし、「ユーザー4」を1回インクリメントします。

> $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になってしまうと思います。カスタムオブジェクトを含むレポートを作成するときに、あなたが行っているのと同じようなものを使用します。ただし、実際に1つのプロパティを格納するためにそれを使用している場合は、おそらくやり過ぎです。あなたはちょうどこのようなことをすることができます:

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

スクリプト全体でオブジェクトに新しいノートプロパティを本当に追加したい場合は、これが私のやり方です。PowerShellは同じ名前のメモプロパティを追加することを好まないことに注意してください。そのため、追加する場合は、プロパティを=で設定する必要があります。

これが私がしていることの例です:

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