2015-02-05 23 views
1

我遇到問題,無法在線找到解決方案。Powershell讀取主機用戶輸入添加

我有下面的代碼,我想讀兩個輸入並將它們保存在文本文件中。當用戶放置他的電子郵件和API令牌時,它會創建一個文本文件並將其輸入分爲兩行。我不知道如何使用Read-Host

例如:

[email protected]
123456789ABCDEFG

我想要做的就是用他的投入,但有一個默認的名字在每行前面如:

Email = [email protected]
APIToken = 123456789ABCDEFG

這裏是我的代碼:

Write-Host 'Enter your email: ' 
Read-Host | Out-File $CredsFile 

Write-Host 'Enter your API Token: ' 
Read-Host | Out-File $CredsFile -Append 

$CredsFile = $CredsFile -join [Environment]::NewLine 
$configuration = ConvertFrom-StringData($CredsFile) 
$email = $configuration.'Email' 
$api_token = $configuration.'APIToken' 
+0

我在這裏的答案可以幫助http://stackoverflow.com/questions/27630925/native-mechanism-for-parsing-input-parameter-value-pairs-from-string/27631598#27631598。它根據讀主機的用戶輸入創建散列表 – Matt 2015-02-05 17:47:46

回答

3

可以使用sub-expressions $(...)地方Read-Host字符串文字裏面的電話:

Write-Host 'Enter your email: ' 
"Email = $(Read-Host)" | Out-File -Append $CredsFile 

Write-Host 'Enter your API Token: ' 
"APIToken = $(Read-Host)" | Out-File -Append $CredsFile 

這將允許你建立一個自定義每個輸入周圍的標籤。

此外,爲了Write-Host調用是不必要的,因爲Read-Host接受一個提示字符串參數:

"Email = $(Read-Host 'Enter your email')" | Out-File -Append $CredsFile 
"APIToken = $(Read-Host 'Enter your API Token')" | Out-File -Append $CredsFile 

最後,確保你使用-Append標誌與Out-File正如我上面一樣。沒有這個,文件的內容將被每個寫入操作覆蓋。

+0

非常感謝。我是新的:-)它工作 – user01230 2015-02-05 17:53:07

0

既然您已經在嘗試創建散列表,我們可能會使用並單獨使用Read-Host並拆分結果。根據目標受衆,可能會被認爲不那麼直觀,但我喜歡打開您的選擇。特別是如果你不需要發送數據到文件。

$input = (Read-Host "Please enter your email and key seperated by a space").Split(" ") 
$configuration = @" 
    Email = {0} 
    APIToken = {1} 
"@ -f $input[0],$input[1] | ConvertFrom-StringData 

$email = $configuration.Email 
$api_token = $configuration.'APIToken' 

這是假設你並不真的需要將其發送到文件。你仍然可以。只是不需要成爲這個過程的一部分。

我看到了一條評論,但我想你已經刪除了它。如果你想輸出這個信息到你的例子中,你可以這樣做。

$configuration.GetEnumerator() | ForEach-Object{"$($_.Name) = $($_.Value)"} | Set-Content $CredsFile 

根據文件的需要,你可以簡化它。