提示用户输入并保存该输入以供将来的脚本迭代使用

时间:2017-05-06 16:16:37

标签: powershell batch-file

我通过计划任务每​​分钟构建一个在用户PC上运行的脚本。计划任务由最初运行PowerShell脚本的批处理脚本创建,但也会将任务计划为每分钟运行一次。

我希望PowerShell脚本提示用户输入某些变量(用户名,电子邮件地址),并在每次自动运行时记住这些变量,直到用户下次手动运行脚本为止。

我知道我可以这样做:

$email= Read-Host 'What is your email address?'

但是如何保存输入直到下次手动打开它?

我的一个想法是拥有一个批处理脚本,可以安排任务每分钟运行批处理脚本。然后,批处理脚本将在每次运行时运行PowerShell脚本,并根据用户编辑批处理脚本的方式自动并静默响应所提问题。必须有一个比这更好的方法。

1 个答案:

答案 0 :(得分:2)

您可以执行类似的操作,将配置存储在用户配置文件下的XML文件中,除非该文件已经存在,在这种情况下它会加载它:

$ConfigPath = "$env:userprofile\userconfig.xml"

If (test-path $ConfigPath){
    $Config = Import-Clixml $ConfigPath

}Else{
    $ConfigHash = @{
        email = read-host "What is your email address?"
        username = read-host "What is your username?"
    }

    $Config = New-Object -TypeName PSObject -Property $ConfigHash
    $Config | export-clixml $ConfigPath
}

然后,您可以按如下方式访问配置设置:

$Config.email
$Config.username

<强>解释

  • 定义存储配置的路径(使用环境变量UserProfile)
  • 使用Test-Path检查文件是否存在
  • 如果确实存在,请使用Import-CliXML cmdlet将文件加载到变量$Config中的PowerShell对象中。
  • 如果它不存在,则创建一个哈希表,提示用户进行每个配置设置
  • 使用New-Object将该Hashtable转换为存储在$Config
  • 中的PowerShell对象
  • 使用$ConfigExport-CliXML写入XML文件,并将其存储在$ConfigPath中定义的路径下。