代码:
$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}
答案 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
依旧...... :)