【问题标题】:Supress PowerShell prompting "Press any key to continue..."禁止 PowerShell 提示“按任意键继续...”
【发布时间】:2020-03-14 06:34:08
【问题描述】:

我正在从 .bat 运行一个 powershell 脚本,以使其双击友好。代码如下:

powershell.exe -ExecutionPolicy unrestricted -NoExit -command "Start-Process powershell -Verb RunAs" {<Location of .ps1 file here>; <arguments>; pause }

它运行良好,但完成后显示“按任意键继续”,powershell 窗口关闭,但我需要它保持打开状态,因为在脚本结束时它会显示一些额外的命令,我们需要运行以完成过程。

有什么想法吗?谢谢!

【问题讨论】:

    标签: powershell batch-file scripting windows-server


    【解决方案1】:

    要在使用 -Command(或 -File)执行命令后保持 PowerShell 窗口打开(其会话处于活动状态),请使用 CLI-NoExit 参数,就像已经显示在 outer PowerShell 调用的问题中。

    这样您就不需要交互式延迟关闭命令,例如 pause(这是一个简单地调用 $null = Read-Host 'Press Enter to continue...' 的函数)。

    因此:

    • -NoExit 参数添加到innerStart-Process-launched PowerShell 实例,或者 - 更有可能 - 代替;您需要向右滚动才能在下面的命令中看到它。

    • 从内部命令字符串中删除pause 命令。

    注意:我假设您实际上并不需要外部 -NoExit,因为它会通过输入交互式 PowerShell 会话无限期地阻止批处理文件,因此在下面的命令中将其省略。

    powershell.exe -ExecutionPolicy unrestricted -command "Start-Process powershell -Verb RunAs '-NoExit', '-Command', '...'"
    

    请注意,将脚本块 ({ ... }) 与 Start-Process 一起使用是没有意义的,因为 Start-Process 仅支持 字符串 作为参数;因此,上面使用'...' 表示要传递给内部PowerShell 实例的命令字符串。

    【讨论】:

    • 谢谢!我能够使用您的建议的变体来使其按需要工作。移动“-NoExit”是我一直在寻找的主要修复,但值得注意的是,我确实需要 scriptblock {...} 才能正确传递参数,但它现在处于工作状态。感谢您的帮助!
    • 很高兴听到这个消息,@dschwartz0815。是的,您可以使用脚本块作为准字面量来帮助缓解围绕嵌入引号的逃避痛苦,但请注意,您实际上并没有将 脚本块 传递给目标实例(尽管在这个特定的情况下没有太大区别);基本上,.ToString() 是在您的脚本块文字 ({ ... }) 上调用的,这与获取其内容 verbatim 相同,没有封闭的花括号。
    • 这对我来说很有意义。不过,您可能是对的,这很可能是我忽略的语法问题,并且使用脚本块有助于我的格式设置。我今天盯着这个看了一会儿。根据您的建议,一些新鲜的眼睛可能会使其发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2013-11-10
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多