如何以更简单的方式将.csv导入多个数组?

时间:2013-05-31 15:57:16

标签: arrays powershell import

我是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值的所有条目的组,然后创建3个单独的组,这些组仅包含vmName值,但使用层值对它们进行排序。

任何人都可以通过更简单的方式帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

对于最后三个,您可以通过Tier属性对对象进行分组,并将结果作为hasthable。然后,您可以引用层名称以获取其VM。

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

# get web VMs
$gs['web']

# get sql VMs
$gs['app']

答案 1 :(得分:0)

您可能希望使用字典来存储数据:

$vmimport = Import-Csv "gss_prod.csv"

$gssall = $vmimport | % { $_.vmName }

$categories = "web", "app", "sql", ...
$gss = @{}
foreach ($cat in $categories) {
  $gss[$cat] = $vmimport | ? { $_.tier -eq $cat } | % { $_.vmName }
}

答案 2 :(得分: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.