使用PowerShell将数据正确导入数组

STG*_*Gdb 5 powershell

我试图整理一个PowerShell脚本,它将从CSV读取数据(它实际上是制表符分隔而不是CSV,但对于SO,我们将使用逗号)并将该数据导入PowerShell多维数组.我的CSV包含以下数据:

EmpID,Name,Dept
12345,John,Service
56789,Sarah,Sales
98765,Chris,Director
Run Code Online (Sandbox Code Playgroud)

我的脚本如下:

$temp=gc "temp.csv"
$array=@()

$temp | Foreach{
    $elements=$_.split(",")
    $array+= ,@($elements[0],$elements[1],$elements[2])
}

foreach($value in $array)
{
    write-host "EmpID =" $value[0] "and Name =" $value[1] "and Dept =" $value[2]
}
Run Code Online (Sandbox Code Playgroud)

上面的工作,但我想能够通过一个更合适的名称引用数组元素,因为有比上面显示的更多的元素,这会让人感到困惑.为此,我尝试使用哈希表,定义新对象,成员,类型等,但它们似乎永远不会正常工作.我可能错了,但我觉得我在一个圈子里奔跑,现在我可能会迷失方向.基本上,我想要做的是,而不是使用:

write-host "EmpID =" $value[0] "and Name =" $value[1] "and Dept =" $value[2]
Run Code Online (Sandbox Code Playgroud)

我想用以下内容替换上面的内容:

write-host "EmpID =" $value.EmpID "and Name =" $value.Name "and Dept =" $value.Dept
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,有人能指出我正确的方向吗?CSV来自另一个来源,无论如何都带有标题行(除非通过手动编辑CSV,否则无法删除).所以我想使用标题行来命名数组列,但我不必使用它.这里我的主要问题(目标)是至少能够命名不同的列.它可以通过使用从CSV导入的第一行动态完成,也可以通过在脚本本身中输入名称来完成.

谢谢

小智 10

您无需将Import-Csv内容添加到阵列.Import-Csv将数据作为对象导入哈希表.

哈希表存储"键值对".因此,在哈希表中,您不使用数字索引来处理单个元素,而是使用您分配给值的键.

$csv = Import-Csv "temp.csv"

foreach($item in $csv)
    {
    "EmpID = $($item.EmpID) and Name = $($item.Name) and Dept = $($item.Dept)"
    }
Run Code Online (Sandbox Code Playgroud)


Tim*_*ill 9

你的工作太辛苦了.默认情况下,Import-CSV将使用逗号分隔,您可以使用-Delimiter处理制表符分隔.从那里您可以按名称引用列.

Import-CSV "temp.csv" | Write-Host "EmpID=" + $_.EmpID
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的提示。我太忙了,忙着看不必要的事情。是的,我工作太努力了,等不及放假了(再多三个星期 - 是的)。通过使用 Import-CSV,我可以将 CSV 数据直接导入数组(标题行是数组元素的名称)。根据您的提示,通过使用 `$array = @(Import-CSV "temp.csv")`,我可以使用 `$array.Name` 产生所需的结果,太棒了 - 再次感谢 (2认同)