从ConvertFrom-StringData溅出单行字符串时出错

时间:2014-12-24 05:12:04

标签: powershell powershell-v3.0

在尝试回答this question时,我试图展示来自Read-Host的字符串数据的示例,这些数据确实有效。

PS C:\temp> $results = (Read-Host) -Split ";" | ConvertFrom-StringData
Get-ChildItem @results

Filter=*.txt;Path="C:\\temp" <--- This was typed in for Read-host

哈希表是成功创建的,或者我假设,但是当尝试splat它时,我收到以下错误:

Get-ChildItem : Cannot find path 'C:\temp\System.Collections.Hashtable' because it does not exist.
At line:2 char:1
+ Get-ChildItem @results
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\temp\System.Collections.Hashtable:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

似乎问题是我没有获得hashtable而是System.Object[]

$results.GetType().Fullname
System.Object[]

我的问题的根源是ConvertFrom-StringData没有像我期望的那样返回哈希表。

如何将字符串“Filter = * .txt; Path = C:\ temp”转换为哈希表?我知道我一般可以在这里使用字符串,但是这是从读取主机输入的,所以我想尝试转换单行字符串。

可能的答案

由于ConvertFrom-StringData喜欢新行,所以我能够解决这个问题。

PS C:\temp> $hashFromStringData = ("Filter=*.txt;Path=C:\\temp" -Split ";") -Join "`r`n" | ConvertFrom-StringData
$hashFromStringData.GetType().FullName

System.Collections.Hashtable

不确定是否有更好的方法。

2 个答案:

答案 0 :(得分:2)

我接近我自己的解决方案,但直到Micky写道我有任何哈希表数组时才明白确切的问题(似乎我只是在{{1}上釉} [])。就像Steven Penny引用System.Object[]在每一行上使用键/值对一样。

ConvertFrom-StringData

这将通过几行创建哈希表数组。它需要是一条连续的线。我能够解决这个问题的两种方式是:

-Split ";" | ConvertFrom-StringData

或更简单的

("Filter=*.txt;Path=C:\\temp" -Split ";") -Join "`r`n"

答案 1 :(得分:1)

看起来这是设计

  

ConvertFrom-StringData cmdlet转换包含一个或多个字符串的字符串   键和值对进入哈希表。因为   每个键/值对必须位于单独的行,此处 - 字符串通常是   用作输入格式。

ConvertFrom-StringData