在尝试回答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
不确定是否有更好的方法。
答案 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转换包含一个或多个字符串的字符串 键和值对进入哈希表。因为 每个键/值对必须位于单独的行,此处 - 字符串通常是 用作输入格式。