2013-06-04 46 views
2

好吧所以我很新的PowerShell,我可以導入一個沒有任何標題的CSV文件。 (我手動添加它)我的數組看起來像這樣。獲取單個屬性不包含「@ {」

Servers 
Plab2 
192.168.10.204 

當我通過數組,而不是能搶「Plab2」或「192.168.10.204」我得到循環「@ {服務器= Plab2}」或「@ {服務器= 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 
} 
+0

替代'$ B = $列表[ $ i] [0]'與'$ b = $ List [$ i] [0] .Server' –

+0

這也很好。再次感謝 – seanmt13

回答

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 } 
+0

謝謝,這正是我需要的! – seanmt13

+0

請注意,'%{Write-Host $ _。Server}'與'%{$ _。Server}'不一樣。將結果分配給變量時,差異會變得明顯。 –

+0

@AnsgarWiechers:不,它是不一樣的。 '$ _。Server'將結果返回到管道,'Write-Host $ _。Server'將它發送給主機(例如控制檯)。 –

3

你得到的格式是因爲數組中的每個對象是與屬性「服務器」的對象(如指定在-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 
相關問題