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
根据文件的需要,您可以使其更简单。
我有一个问题,我无法在网上找到解决方案。
我有以下代码,我想读取两个输入并将它们保存在文本文件中。当用户输入他的电子邮件和 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
根据文件的需要,您可以使其更简单。