2016-02-01 59 views
1

PowerShell的表我有一個文件,內容如下所示:如何從文件中讀取

File Versions    
---- --------    
aaa {1.0.0.123, 1.0.0.124} 
bbb {1.0.0.123, 1.0.0.124} 

如何在PowerShell中讀入表,或類型數組?

我創建了這個腳本文件:

$versions = $dictionary | ForEach-Object{ 
    $properties = @{ 
     File = $dictionary.Key 
     Versions = $dictionary.Value <# an array of strings #> 
    } 
    New-Object PSObject -Property $properties 
} 

$versions | Out-File "filesVersions.txt" 

腳本不再使用。這只是爲了展示filesVersions.txt文件中的內容。

我真正想要的是將一個鍵值對存儲在一個文件中,其中鍵是FileName,值是版本列表。

有時我需要讀取文件內容,將所有新行或新版本讀到現有行並保存回去。

我想爲它使用Format-Table輸出。

+2

看起來您已將'Format-Table'輸出保存到文件中。你對這個輸出有控制嗎?解決這個問題然後解析它現在會更容易。或者它實際上是一個CSV文件,您可以使用'Import-CSV「filesVersions.csv」'。或者這是一個大文件,這就是爲什麼你使用'ReadAllLines'? – Matt

+0

什麼是$版本? – Matt

+0

看到我的編輯更多一點解釋。不管什麼是filesVersions.csv或$ dictionary,因爲它不再存在。這只是我的測試數據,我將它保存到一個文件中,然後我想將其讀回。 – Liero

回答

1

我想爲它使用Format-Table輸出。對不起,但這不是你應該這樣做的方式。你正在增加很多不必要的開銷。你正在尋找字符串解析哪個可能是不可靠和乏味的。

PowerShell的權力來自對象。在這種情況下使用Export-CSV將是理想的。但是,您需要對該陣列進行雙向操作。

$versions = $dictionary | ForEach-Object{ 
    $properties = @{ 
     File = $dictionary.Key 
     Versions = $dictionary.Value -join "|" 
    } 
    New-Object PSObject -Property $properties 
} 

$versions | Export-Csv "filesVersions.csv" -NoTypeInformation 

當您將數據導回到PowerShell中以獲取對象時,您需要拆分該字段以獲取數組。

Import-Csv "filesVersions.csv" | ForEach-Object{ 
    # Update the property 
    $_.Versions = $_.Versions -split "|" 
    # Send the updated object down the pipe 
    $_ 
} 

或使用計算性能

Import-Csv "filesVersions.csv" | Select-Object File,@{Name="Versions";Expression={$_.Versions -split "|"}} 

Mathias says你也可以使用Export-CLIXML,你不會需要做的加入或任何東西。我個人認爲這是更復雜的輸出,那麼你在這裏做什麼。