Import-Csv Powershell

时间:2017-10-13 11:37:14

标签: powershell csv

代码:

$Computers = Import-Csv -Path C:\temp\Computers.csv
write-host $Computers

CSV文件(其中US-1为A1,US-2为A2,依此类推)

US-1
US-2
US-3
US-4

我认为Import-Csv输入不正确,因为Write-Host $ Computers给了我这个:

@ {US-1 = US-2} @ {US-1 = US-3} @ {US-1 = US-4}

但如果以这种方式分配$ Computers:

$Computers = "US-1", "US-2", "US-3", "US-4"

输出正确:

US-1 US-2 US-3 US-4

因此,我需要从CSV导入以方便使用,但是每个计算机名称都以正确的方式保存,没有括号或符号。这使得在我的程序的其余部分中使用计算机名称非常困难。

编辑:正如所讨论的,我已经正确格式化了csv,现在就是这样:

Computers,
US-1
US-2
US-3
US-4

现在获得输出:

@ {Computers = US-1} @ {Computers = US-2} @ {Computers = US-3} @ {Computers = US-4}

2 个答案:

答案 0 :(得分:1)

您的CSV文件格式错误;它没有标题行。重新生成文件以使其具有标题行,或使用-Header参数Import-CSV

一旦你有一个格式正确的CSV(或者用手动提供的头文件导入),你就可以将$computers作为PSObjects数组引用,其中每个PSObject都包含一个带有提供名称的成员 - 例如,如果您使用

$Computers = Import-CSV -Header "RegionName" -Path C:\TEMP\Computers.CSV

然后您可以将各个记录称为$Computers[$n].RegionName

在编辑原始问题之后,访问数组中各个项目的正确方法是$Computers[$n].Computers。要从最初描述的文本文件中检索计算机,而不需要使用字段名称,请使用Get-Content而不是Import-CSV

答案 1 :(得分:1)

简单CSV

创建CSV(computers.csv):

Computer
US-1
US-2
US-3

导入您的CSV:

$computers = Import-Csv Computers.csv

访问您的值:

Write-Host $computers # This results to something like this: @{Computers=US-1} @{Computers=US-2} @{Computers=US-3} @{Computers=US-4}
# This is perfectly fine. It's all of your computer-objects

访问每个值:

write-host $computers[n] # replace n with your index, starting at 0 to n-1
write-host $computers[1] # results in US-2

如果只关注计算机,你可以这样做:

write-host $computers.Computer # restults in US-1 US-2 US-3 US-4

同样适用于更多CSV:

Computers, OperatingSystem
US-1, Windows
US-2, Linux
US-3, SomeOtherUnix
US-4, MacOS

导入您的CSV:

$computers = Import-Csv Computers.csv

访问您的值:

Write-Host $computers # This results to something like this: 
# @{Computers=US-1; OperatingSystem=Windows} @{Computers=US-2; OperatingSystem=Linux} @{Computers=US-3; OperatingSystem=SomeOtherUnix} @{Computers=US-4; OperatingSystem=MacOS}
# This is perfectly fine. It's all of your computer-objects

访问每个值:

write-host $computers[n] # replace n with your index, starting at 0 to n-1
write-host $computers[1] # results in 

Computers OperatingSystem
--------- ---------------
US-1      Windows

如果只关注计算机/操作系统,你可以这样做:

write-host $computers.Computers # restults in US-1 US-2 US-3 US-4
write-host $computers.OperatingSystem # restults in US-1 US-2 US-3 US-4

依旧...... :)