Powershell:foreach内の動的変数


0

私は検索を実行し、匿名でいくつかの結果を数え、それからユーザーごとの積算合計に追加するために使用するユーザーの動的リストに対していくつかの数学をやろうとしています。だから、例えば:

$users = Get-ADUser -filter blah
[int]$usercount = $users.count

for ($z=1; $z -le $usercount; $z++) {
    **** create variable here - $user$z ***
}

変数が作成されたら、変数に既に格納されている数にカウントを追加するループで利用できるようにする必要があります。

いいえ、私は$ user変数を使用することはできません。これは、foreachループが終了した後も持続する必要があるためです。

それで、問題は、可能なオブジェクトの数の限界を知らないでどうやってその増分変数を生成するかということです。

---編集---

私が話していることの簡単な例を追加すると...

フィードバックの後、ハッシュテーブルを見ていますが、それでも参照方法を把握できません。

複数のラウンドを持つ人々の動的リストの間のサイコロゲームを想像してみてください。私は彼らの合計をラウンドごとに増やしたい。私の問題は、ロールで合計を更新しようとしている最後の行です。ハッシュテーブル値を参照するにはどうすればいいですか?

[CmdletBinding()]

param (
    [parameter(Mandatory=$false)][ValidateRange(1, [int32]::MaxValue)][int]$rounds = "15",
    [parameter(Mandatory=$false)][ValidateRange(1, [int32]::MaxValue)][int]$players = "2"
)

$ptotal = [ordered]@{}
for ($w=1; $w -le $players; $w++) {
    $ptotal.add("player$w", 0)
}

for ($z=1; $z -le $rounds; $z++) {
    Write-Host Round $z

    for ($y=1; $y -le $players; $y++) {

        $roll = (1..6 | get-random) + (1..6 | get-random)
        $ptotal.player$y = $ptotal.player$y + $roll
    }
}

1
PSであらかじめvarを宣言する必要はありません。しかし、あなたはまたあなたが今行っているやり方で問題を引き起こすことになるであろう可変範囲も調査するべきです。
music2myear

後で追加するループが複数あるため、ループ内で変数を使用することはできないため、実際には事前に宣言する必要があります。スコープの問題も理解してください、そして私はそれに対処します、私は後でそれを読むことができるように変数を作成する方法を探しています...
Steven

$ Script:var_nameを使用してvarを参照し続ける限り、スクリプト内で、ループまたは関数内でそれらを操作できます。これがあなたが求めているものではない場合、おそらくあなたは明確にすることができますか?
music2myear

2
あなたは変数を作成することができます New-Variable コマンドレット。として for loopは新しいスコープを導入しません、それらはデフォルトで現在のスコープで以下のループで利用可能になります。必要なスコープをパラメータとして指定できます。 New-Variable コマンドレットも。しかし、動的な名前を持つ変数を使用するのに正当な理由がない限り、代わりに配列を使用することを検討してください。
PetSerAl

回答:


0

あなたの例ではそれは $ptotal["player$y"] += $roll

連想配列やオブジェクトのようにハッシュテーブルを使うことができます。それらについての非常に良い読書は https://kevinmarquette.github.io/2016-11-06-powershell-hashtable-everything-you-wanted-to-know-about/ (もちろん公式文書の上に)


と言っていますあなたは感謝の表現として "投票する"を使うことができます;)
maoizm

1
@maoizm "投票する"には15ポイントが必要ですが、OPには3しかありません。
PetSerAl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.