没有“@ {”从数组中获取单个属性

时间:2013-06-04 21:13:02

标签: arrays powershell

好吧所以我对powershell很新,我可以导入一个没有任何标题的csv文件。 (我手动添加它)我的数组看起来像这样。

Servers
Plab2
192.168.10.204

当我遍历数组而不是能够抓住" Plab2"或" 192.168.10.204"我得到" @ {Server = Plab2}"或" @ {Server = 192.168.10.204"有没有什么方法可以抓住价值" Plab2"或" 192.168.10.204"?

这是我的代码

$list = Import-Csv $inputFile -Header Server
For($i=0; $i -le $List.Count -1; $i++){
$b = $List[$i][0]
Write-Host $b
}

2 个答案:

答案 0 :(得分:3)

您获得的格式是因为数组中的每个对象都是具有属性" Server"的对象(在-Header Server中指定。

您的文件不是csv文件。 csv文件具有一行上相同对象的属性(如名称和IP),由分隔符分隔(例如逗号,)。所以您可以执行以下操作之一:

使用Get-Content将文件作为纯文本阅读,然后选择元素(名称和IP)

$arr = Get-Content $inputFile
$arr[1]
$arr[2]

Plab2
192.168.10.204

您可以访问循环中每个对象的Server属性以获取值。

Import-Csv $inputFile -Header Server | ForEach-Object {
    Write-Host $_.Server
}

Servers
Plab2
192.168.10.204

您还可以将文件重写为正确的csv格式,例如:

csvfile:

ServerName,IP
Plab2,192.168.10.204

脚本:

Import-Csv $inputFile | % {
    $_.ServerName
    $_.IP
}

Plab2
192.168.10.204

答案 1 :(得分:1)

我认为这就是你想要的:

$list = Import-Csv $inputFile -Header Server
$list | Foreach-Object { Write-Host $_.Server }

请注意

$list | Foreach-Object { Write-Host $_.Server }

可以缩写为

$list | %{ Write-Host $_.Server }

此外,如果这不是从另一个脚本调用的东西(即你不介意从管道中返回项目),你可以像这样写这行:

$list | %{ $_.Server }