0

私はpowershellを初めて使用し、最初のやや複雑なスクリプトを書いています。.csv ファイルをインポートして、複数のテキスト配列を作成したいと考えています。機能する方法を見つけたと思いますが、必要なすべての行を生成するには時間がかかります。foreach-object を使用してもっと簡単にできると思いますが、正しい構文を取得できないようです。

私の現在のコードを参照してください...

$vmimport = Import-Csv "gss_prod.csv"
$gssall = $vmimport | ForEach-Object {$_.vmName}`
$gssweb = $vmimport | Where-Object {$_.tier -eq web} | ForEach-Object {$_.vmName}
$gssapp = $vmimport | Where-Object {$_.tier -eq app} | ForEach-Object {$_.vmName}
$gsssql = $vmimport | Where-Object {$_.tier -eq sql} | ForEach-Object {$_.vmName}

目標は、すべてのエントリが vmName 値のみを含む 1 つのグループを作成し、次に vmName 値のみを含むが層値を使用してそれらをソートする 3 つの個別のグループを作成することです。

これを行うためのより簡単な方法で誰かが私を助けることができますか?

ありがとう!

4

3 に答える 3

2

最後の 3 つは、オブジェクトを Tier プロパティでグループ化し、結果をハッシュ可能にすることができます。次に、層名を参照してその VM を取得できます。

#group objects by tier
$gs = $vmimport | Group-Object tier -AsHashTable

# get web VMs
$gs['web']

# get sql VMs
$gs['app']
于 2013-05-31T19:16:31.347 に答える
0

私は Shay Levy 方式が好きですが、ハッシュ テーブルの値はハッシュ テーブルのままです。これは、値がギザギザの配列で、カテゴリが自動的に作成される、より効率的な別のアプローチです (Ansgar Wiechers ソリューションとは対照的です)。

# define hashtable
$gs = @{};

# fill it
$vmimport | foreach {$gs[$_.tier]+=, $_.vmName};

# get web VMs
$gs['web'] # the result is an array of 'web' vmNames.
于 2013-05-31T19:41:59.523 に答える