2

好的所以我对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
}
4

2 回答 2

3

您得到的格式是因为数组中的每个对象都是具有属性“服务器”的对象(如-Header Server.

您的文件不是 csv 文件。csv 文件在 ONE 行上具有相同对象的属性(如名称和 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 格式,例如:

csv 文件:

ServerName,IP
Plab2,192.168.10.204

脚本:

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

Plab2
192.168.10.204
于 2013-06-04T21:26:23.940 回答
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 }
于 2013-06-04T21:22:29.193 回答