2016-02-12 75 views
0

我只是試圖適應the scripting guy's example使用ConvertFrom-StringData從一個文本文件中讀取數據並解析哈希表:ConvertFrom-StringData是失敗鑄造Hashtable的

$PSVersionTable.PSVersion; 

[String] $loginsFileName = "$HOME\Logins.txt"; 

Get-Content $loginsFileName; 

[Hashtable] $logins = Get-Content -Path $loginsFileName | ConvertFrom-StringData; 

Write-Host got $logins.count lines from $loginsFileName; 
$logins.GetEnumerator() | Sort-Object Name; 

我被搞砸了:

Major Minor Build Revision 
----- ----- ----- -------- 
3  0  -1  -1  

Lisa=GanzGeheim 
Susanne=ganzgeheim 
Fritz=geheim 
Hans=Geheim 

Der Wert "System.Object[]" vom Typ "System.Object[]" kann nicht in den Typ "System.Collections.Hashtable" konvertiert werden. 
In Zeile:11 Zeichen:1 
+ [Hashtable] $logins = Get-Content -Path $loginsFileName | ConvertFrom-StringData ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : MetadataError: (:) [], ArgumentTransformationMetadataException 
    + FullyQualifiedErrorId : RuntimeException 

got 0 lines from E:\Users\Christian\Logins.txt 

我的猜測:管道出問題了。我試圖強調Get-Content通過擁抱(Get-Content-Path $ loginsFileName)來傳遞一個數組 - 沒有任何改進。任何人都可以給我一些提示嗎?

回答

1

對不起,誤導你更早。你遇到的問題是你得到了一組單鍵哈希表,因爲Get-Content。對於我認爲你正在尋找的東西,你應該把它作爲一個字符串讀入文件中。假設你至少有PowerShell v3:

$logins = Get-Content -Path $loginsFileName -Raw | ConvertFrom-StringData; 

這就是你得到一個單一的散列表應該是一個哈希表數組。自從PowerShell將輸出很好地分組以來,這讓我有一段時間了。

-Raw是3.0的一個特性。如果您無法訪問3.0,則這些解決方案中的任何一個都足夠。

$logins = Get-Content -Path $loginsFileName | Out-String | ConvertFrom-StringData; 
$logins = ((Get-Content -Path $loginsFileName) -join "`r`n") | ConvertFrom-StringData; 
+0

非常感謝,-Raw做到了! – Christian

+0

如果你不能使用'-Raw'開關,你應該可以執行'(Get-Content -Path $ loginsFileName) - 加入「'r'n」'來取得相同的結果。 – TheMadTechnician

+0

@TheMadTechnician我在想什麼,我應該停止提及約2.0 – Matt