执行powershell命令后批处理文件暂停

时间:2020-01-09 11:10:17

标签: powershell batch-file

我想做的是为实际进程(cmd.exe)设置-ExecutionPolicy(允许脚本)

如果在cmd.exe中(以管理员身份)写入此命令:

PowerShell.exe -ExecutionPolicy Unrestricted

输出为:

Windows PowerShell 
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

Lernen Sie das neue plattformübergreifende PowerShell kennen – https://aka.ms/pscore6

比我施加以下命令:

PowerShell.exe -Command "SomePowerShellScript.ps"

所有作品。

如果我从批处理文件中尝试相同的操作,它将在第一个命令后暂停。

Microsoft描述了为什么使用第一个命令而不使用Set-ExecutionPolicy特定于Powershell的原因:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1

PowerShell.exe -ExecutionPolicy Unrestricted

->将ExecutionPolicy设置为cmd和powershell(可以启动脚本)

PowerShell.exe -Command Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

->仅在实际的powershell.exe进程上设置策略(不允许启动脚本)

为澄清起见,我不想在可能的情况下将LocalMachine / CurrentUser的执行策略设置为Unrestricted。

为说明此问题,批处理文件仅用于“懒惰”的人,无需设置ExecutionPolicy即可直接启动Powershell-Script(因此双击即可工作)。

有人知道为什么批处理文件在第一个命令后会暂停吗(我也通过调用powershell.exe尝试过)?

感谢您的回复:)。

1 个答案:

答案 0 :(得分:3)

明显的暂停是由于PowerShell.exe -ExecutionPolicy Unrestricted实际进入了一个 interactive PowerShell会话,您必须手动exit(除此之外,为此设置了执行策略)会话(仅限过程))。

如果将-ExecutionPolicy Unrestricted(或-ExecutionPolicy Bypass)放在-File参数之前,则在传递给{{1 }},并且执行应该成功(除非组策略优先于在命令行上覆盖持久配置的执行策略:

-File

您也可以使用powershell.exe -ExecutionPolicy Unrestricted -File SomePowerShellScript.ps1 ,但是请注意,这会改变参数的解释;注意,然后必须使用-Command来引用要执行的脚本。

有关更多信息,请参见this answer