How do I run a PowerShell script even if Set-ExecutionPolicy is banned?

前端 未结 4 520
一向
一向 2020-12-12 14:23

The Set-ExecutionPolicy command of PowerShell is banned, so I can NOT run like this:

PS> .\\script.ps1 (enter)

Is there another way to r

相关标签:
4条回答
  • 2020-12-12 15:05

    This is a slight enhancement to Andy's answer to this question. If an admin sets a restrictive PowerShell script execution policy in a GPO (probably under the mistaken notion that PowerShell execution policy is a security boundary), you can get a PowerShell interactive session that has execution policy disabled by using the following command line:

    powershell.exe -EncodedCommand ZgB1AG4AYwB0AGkAbwBuACAARABpAHMAYQBiAGwAZQAtAEUAeABlAGMAdQB0AGkAbwBuAFAAbwBsAGkAYwB5AHsAKAAkAGMAdAB4AD0AJABFAHgAZQBjAHUAdABpAG8AbgBDAG8AbgB0AGUAeAB0AC4ARwBlAHQAVAB5AHAAZQAoACkALgBHAGUAdABGAGkAZQBsAGQAKAAiAF8AYwBvAG4AdABlAHgAdAAiACwAIgBuAG8AbgBwAHUAYgBsAGkAYwAsAGkAbgBzAHQAYQBuAGMAZQAiACkALgBHAGUAdABWAGEAbAB1AGUAKAAkAEUAeABlAGMAdQB0AGkAbwBuAEMAbwBuAHQAZQB4AHQAKQApAC4ARwBlAHQAVAB5AHAAZQAoACkALgBHAGUAdABGAGkAZQBsAGQAKAAiAF8AYQB1AHQAaABvAHIAaQB6AGEAdABpAG8AbgBNAGEAbgBhAGcAZQByACIALAAiAG4AbwBuAHAAdQBiAGwAaQBjACwAaQBuAHMAdABhAG4AYwBlACIAKQAuAFMAZQB0AFYAYQBsAHUAZQAoACQAYwB0AHgALAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAdQB0AGgAbwByAGkAegBhAHQAaQBvAG4ATQBhAG4AYQBnAGUAcgAgACIATQBpAGMAcgBvAHMAbwBmAHQALgBQAG8AdwBlAHIAUwBoAGUAbABsACIAKQApAH0AOwBEAGkAcwBhAGIAbABlAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAOwBpAGYAKABUAGUAcwB0AC0AUABhAHQAaAAgACQAUABSAE8ARgBJAEwARQApAHsALgAgACQAUABSAE8ARgBJAEwARQB9AA== -NoExit
    

    The -EncodedCommand here is the following code:

    function Disable-ExecutionPolicy{($ctx=$ExecutionContext.GetType().GetField("_context","nonpublic,instance").GetValue($ExecutionContext)).GetType().GetField("_authorizationManager","nonpublic,instance").SetValue($ctx,(New-Object Management.Automation.AuthorizationManager "Microsoft.PowerShell"))};Disable-ExecutionPolicy;if(Test-Path $PROFILE){. $PROFILE}
    

    That is, disable the execution policy by running the function described in Andy's answer, and then dot-source the current user profile script if it exists.

    0 讨论(0)
  • 2020-12-12 15:11

    Oisin Grehan has an interesting post on his blog which provides another way to bypass the execution policy. Open a shell and run this:

    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
    

    This removes the default host authorization manager which will allow you to call scripts from that shell. You'd have to run this for each shell you open though since the execution policy is only overridden in the shell in which this is run.

    0 讨论(0)
  • 2020-12-12 15:24

    The easiest silliest way around this is just:

    gc .\script.ps1 | iex
    

    This works in PowerShell and doesn't care about ExecutionPolicy. Just make sure that you are careful with newlines. Keep {}s and similar on the same line, using ;s where needed.

    0 讨论(0)
  • 2020-12-12 15:25

    This is what we use to run PowerShell scripts from Java (works regardless of the execution policy):

    powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File <script_name>
    
    0 讨论(0)
提交回复
热议问题