即使禁止Set-ExecutionPolicy,如何运行PowerShell脚本?

Mik*_*ike 28 java powershell

PowerShell的Set-ExecutionPolicy命令被禁止,所以我不能这样运行:

PS> .\script.ps1 (enter)
Run Code Online (Sandbox Code Playgroud)

除了"Windows PowerShell ISE"之外,还有其他方法可以运行PowerShell脚本吗?

PS:我能够使用Java的ProccessBuilder来运行单个PowerShell命令,但不知道如何运行整个脚本.

jta*_*orn 62

这是我们用来从Java运行PowerShell脚本的方法(无论执行策略如何都有效):

powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File <script_name>
Run Code Online (Sandbox Code Playgroud)

  • @EricJ. - 我认为关键是你从命令行运行.自动执行的脚本将无法操作命令行,因此将受当前策略的约束.可以访问命令行的程序可能已经在当前帐户的限制范围内具有完全访问权限. (9认同)
  • 如果可以从命令行绕过执行策略,那么设置它的重点是什么? (6认同)

Spe*_*ngD 7

最简单的解决这个最愚蠢的办法就是:

gc .\script.ps1 | iex
Run Code Online (Sandbox Code Playgroud)

这适用于PowerShell,并不关心ExecutionPolicy.只要确保你对新行很小心.保持{}s和类似的在同一条线上,;在需要的地方使用s.


And*_*ndi 6

Oisin Grehan在他的博客上有一篇有趣的帖子,提供了另一种绕过执行政策的方法.打开一个shell并运行它:

function Disable-ExecutionPolicy {
    ($ctx = $executioncontext.gettype().getfield(
        "_context", "nonpublic,instance").getvalue(
            $executioncontext)).gettype().getfield(
                "_authorizationManager", "nonpublic,instance").setvalue(
        $ctx, (new-object System.Management.Automation.AuthorizationManager
                  "Microsoft.PowerShell"))
}
Disable-ExecutionPolicy
Run Code Online (Sandbox Code Playgroud)

这将删除默认的主机授权管理器,该管理器允许您从该shell调用脚本.您必须为打开的每个shell运行此命令,因为执行策略仅在运行它的shell中被覆盖.