Powershell 读取主机用户输入添加

Powershell Read-Host User Input Addition

我有一个问题,我无法在网上找到解决方案。

我有以下代码,我想读取两个输入并将它们保存在文本文件中。当用户输入他的电子邮件和 API 令牌时,它会创建一个文本文件并将他的输入分成两行。我不知道 Read-Host.

有什么用

例如:

myname@example.com
123456789abcdefg

我想做的是使用他的输入,但在每行前面有一个默认名称,例如:

Email = 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'

您可以使用 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 一起使用。如果没有这个,文件的内容将被每次写入操作覆盖。

由于您已经在尝试创建哈希表,我们可以使用单个 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

根据文件的需要,您可以使其更简单。