ConvertFrom-StringData无法转换为Hashtable

时间:2016-02-12 17:43:47

标签: arrays string powershell hashtable

我只是尝试调整the scripting guy's example来读取文本文件中的数据并使用ConvertFrom-StringData解析哈希表:

$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 个答案:

答案 0 :(得分:2)

很抱歉提前误解了你。您遇到的问题是,由于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;