是否有一個本地內置構造,它使用與cmdlet參數相同的規則自動將控制檯輸入分析爲變量?從[字符串]解析輸入參數值對的本地機制
例如,許多cmdlet接受-parameter1 unspaced-value1 -parameter2:"spaced value2"
形式的參數值對。
我想讀的使用也許Read-Host
一個字符串,然後解析字符串爲參數值對,並將其存儲到$variables
,像int main(argv, argc)
,但也許在關聯數組或類似的東西。
是否有一個本地內置構造,它使用與cmdlet參數相同的規則自動將控制檯輸入分析爲變量?從[字符串]解析輸入參數值對的本地機制
例如,許多cmdlet接受-parameter1 unspaced-value1 -parameter2:"spaced value2"
形式的參數值對。
我想讀的使用也許Read-Host
一個字符串,然後解析字符串爲參數值對,並將其存儲到$variables
,像int main(argv, argc)
,但也許在關聯數組或類似的東西。
不知道如果我理解你想要的是什麼,但你肯定描述,可以簡單地定義爲
@{Name="Value";AnotherName="AnotherValue"}
或者更可讀
@{
Name="Value"
AnotherName="AnotherValue"
}
雙方將輸出一個哈希表如下這可以被分配給一個變量,它可用於splatting(稍後更多)
Name Value
---- -----
Name Value
AnotherName AnotherValue
好的,這很好,但你正在尋找一種方式來使用這個adhoc與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
和-Join
。拆分分解對和加入結束創建一個換行符分隔的字符串,其中ConvertFrom-StringData
玩得更好。 注意事項有一個帖子有一個創建multiline input from 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....
注:你應該在我的第二個反斜線Path=C:\\temp
鍵入的路徑注意。究其原因來自TechNet文章爲ConvertFrom-StringData
ConvertFrom-StringData
支持逃脫被 允許通過傳統機器翻譯工具的字符序列。也就是說,在使用Regex.Unescape
方法的字符串數據 轉義字符的cmdlet的 可以解釋反斜槓(\
),而不是在Windows PowerShell 反引號字符(`
),通常會發出信號線的末端, 腳本。在這裏字符串裏面,倒勾字符不是 工作。您還可以通過 保存在您的結果反斜線與前面的反斜線,這樣逃了:\\
。非轉義 反斜槓字符,如那些通常在文件 路徑使用,可以在搜索結果呈現爲非法轉義序列。
小更新
雖然((Read-Host) -Split ";") -Join "`r`n" | ConvertFrom-StringData
作品我敢肯定,下面就簡單多了。
(Read-Host).Replace(";","`r`n") | ConvertFrom-StringData
你只是說像一個hastable? '@ {名稱=「值」}' – Matt
阿散列表是在PowerShell中,是的,@馬特主要關聯數組。 –