我遇到了问题,我无法在线找到解决方案。
我有以下代码,我想读取两个输入并将它们保存在文本文件中。当用户放置他的电子邮件和API令牌时,它会创建一个文本文件并将其输入分为两行。我不知道如何使用Read-Host
。
例如:
myname@example.com
123456789ABCDEFG
我想要做的是使用他的输入,但在每行前面都有一个默认名称,例如:
电子邮件= myname@example.com
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 :(得分: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
一样,如上所述。如果没有这个,每次写操作都会覆盖文件的内容。
答案 1 :(得分: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
根据文件的需要,您可以更简单。