【问题标题】:Prompt user for input and save that input for future iterations of the script提示用户输入并保存该输入以供脚本的未来迭代使用
【发布时间】:2017-05-06 16:16:37
【问题描述】:

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

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

我知道我能做到:

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

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

我的一个想法是有一个批处理脚本,它安排一个任务每分钟运行一个批处理脚本。然后,批处理脚本将在每次运行时运行 PowerShell 脚本,并根据用户编辑批处理脚本的方式自动且无提示地响应提出的问题。一定有比这更好的方法。

【问题讨论】:

    标签: powershell batch-file


    【解决方案1】:

    您可以执行以下操作,将配置作为 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 将该哈希表转换为存储在$Config 中的PowerShell 对象
    • 使用Export-CliXML$Config 写入XML 文件,并将其存储在$ConfigPath 中定义的路径下。

    【讨论】:

    • 我用你在我的问题中写的内容发布了整个脚本。你能验证我是否正确地访问了 xml,因为我以前从未这样做过?
    • 是的,你的脚本看起来应该对我有用。如果您遇到任何错误或意外行为,请尝试并反馈。
    • 似乎工作得很好。 xml 已创建,它运行了多次,只问我一次信息。我可以用批处理来完成其余的工作来启动和安排任务。非常感谢你的协助。非常感谢
    • 我觉得-BodyAsHtml是一个开关,你还需要同时使用-Body $Body
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2021-03-20
    相关资源
    最近更新 更多