不确定我是否完全理解你想要什么,但你肯定是在描述一个哈希表,它可以简单地定义为
@{Name="Value";AnotherName="AnotherValue"}
或者更具可读性
@{
Name="Value"
AnotherName="AnotherValue"
}
两者都会输出以下内容,可以将其分配给可用于的变量飞溅(稍后会详细介绍)
Name Value
---- -----
Name Value
AnotherName AnotherValue
好的,这很好,但是您正在寻找一种使用此临时功能的方法Read-Host
或许?这可能是在哪里ConvertFrom-StringData拯救了这一天。最简单的形式:
PS C:\Users\Cameron> $data = "Data=Awesome"
PS C:\Users\Cameron> $data | ConvertFrom-StringData
Name Value
---- -----
Data Awesome
好吧...那太好了..但是那又怎么样Read-Host
。我们现在就试试吧!
PS C:\Users\Cameron> Read-Host | ConvertFrom-StringData
Something=Blah
Name Value
---- -----
Something Blah
如果您想要执行多个键/值对,这可能会变得复杂,因为Read-Host
似乎不喜欢在提示中插入新行。为了作弊我用-Split
and -Join
。 Split 分解配对并 join 最终创建一个换行符分隔的字符串,其中ConvertFrom-StringData
玩得更好。边注有一篇文章包含用于创建的片段来自 Read-Host 的多行输入但这更简单。
PS C:\Users\Cameron> ((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
Key1=Value1;Key2=Value2;Key3=Value3 <---- That is what I typed in as a response to Read-Host
Name Value
---- -----
Key1 Value1
Key2 Value2
Key3 Value3
如果您仍在阅读,让我们使用 splatting 并给出使用此逻辑的实际理由。
PS C:\Users\Cameron> $results = ((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
Get-ChildItem @results
Filter=*.txt;Path=C:\\temp <---- That is what I typed in as a response to `Read-Host`
LastWriteTime : 10/22/2014 11:43:38 PM
Length : 653018
Name : out1.txt
....output truncated....
Note:您应该注意到我在第二个反斜杠中输入的路径Path=C:\\temp
。原因来自 TechNet 文章ConvertFrom-StringData
ConvertFrom-StringData
支持转义字符序列
传统机器翻译工具允许。也就是说,cmdlet
可以解释反斜杠(\
) 作为字符串数据中的转义字符
通过使用Regex.Unescape
方法,而不是 Windows PowerShell
反引号字符 (`
)通常表示一行的结束
一个脚本。在此处字符串内,反引号字符不
工作。您还可以通过以下方式在结果中保留文字反斜杠用前面的反斜杠转义它, 像这样:\\
。未转义
反斜杠字符,例如文件中常用的反斜杠字符
路径,可能会在结果中呈现为非法转义序列。
小更新
虽然((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
我确信以下内容要简单得多。
(Read-Host).Replace(";","`r`n") | ConvertFrom-StringData