我想做的是为实际进程(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的原因:
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尝试过)?
感谢您的回复:)。
答案 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。