Подтвердить что ты не робот

Как запустить сценарий PowerShell, даже если Set-ExecutionPolicy запрещен?

Команда Set-ExecutionPolicy для PowerShell запрещена, поэтому я НЕ могу запустить ее следующим образом:

PS> .\script.ps1 (enter)

Есть ли другой способ запустить сценарий PowerShell, кроме как из "Windows PowerShell ISE"?

PS: Я смог использовать Java ProccessBuilder для запуска одной команды PowerShell, но не знаю, как запустить весь скрипт.

4b9b3361

Ответ 1

Это то, что мы используем для запуска сценариев PowerShell с Java (работает независимо от политики выполнения):

powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File <script_name>

Ответ 2

Самый простой способ - это просто:

gc .\script.ps1 | iex

Это работает в PowerShell и не заботится о ExecutionPolicy. Просто убедитесь, что вы осторожны с новыми символами. Хранить {} и т.п. в одной строке, используя ; где это необходимо.

Ответ 3

У Oisin Grehan есть интересный пост в его блоге, который предоставляет другой способ обойти политику исполнения. Откройте оболочку и запустите ее:

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

Это удаляет менеджер авторизации хоста по умолчанию, который позволит вам вызывать скрипты из этой оболочки. Вам придется запускать это для каждой открытой оболочки, поскольку, поскольку политика выполнения переопределяется только в оболочке, в которой она запущена.

Ответ 5

Это небольшое улучшение для ответа Энди на этот вопрос. Если администратор устанавливает ограничительную политику выполнения сценариев PowerShell в объекте групповой политики (возможно, из-за ошибочного представления о том, что политика выполнения PowerShell является границей безопасности), вы можете получить интерактивный сеанс PowerShell, в котором отключена политика выполнения, с помощью следующей командной строки:

powershell.exe -EncodedCommand ZgB1AG4AYwB0AGkAbwBuACAARABpAHMAYQBiAGwAZQAtAEUAeABlAGMAdQB0AGkAbwBuAFAAbwBsAGkAYwB5AHsAKAAkAGMAdAB4AD0AJABFAHgAZQBjAHUAdABpAG8AbgBDAG8AbgB0AGUAeAB0AC4ARwBlAHQAVAB5AHAAZQAoACkALgBHAGUAdABGAGkAZQBsAGQAKAAiAF8AYwBvAG4AdABlAHgAdAAiACwAIgBuAG8AbgBwAHUAYgBsAGkAYwAsAGkAbgBzAHQAYQBuAGMAZQAiACkALgBHAGUAdABWAGEAbAB1AGUAKAAkAEUAeABlAGMAdQB0AGkAbwBuAEMAbwBuAHQAZQB4AHQAKQApAC4ARwBlAHQAVAB5AHAAZQAoACkALgBHAGUAdABGAGkAZQBsAGQAKAAiAF8AYQB1AHQAaABvAHIAaQB6AGEAdABpAG8AbgBNAGEAbgBhAGcAZQByACIALAAiAG4AbwBuAHAAdQBiAGwAaQBjACwAaQBuAHMAdABhAG4AYwBlACIAKQAuAFMAZQB0AFYAYQBsAHUAZQAoACQAYwB0AHgALAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAdQB0AGgAbwByAGkAegBhAHQAaQBvAG4ATQBhAG4AYQBnAGUAcgAgACIATQBpAGMAcgBvAHMAbwBmAHQALgBQAG8AdwBlAHIAUwBoAGUAbABsACIAKQApAH0AOwBEAGkAcwBhAGIAbABlAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAOwBpAGYAKABUAGUAcwB0AC0AUABhAHQAaAAgACQAUABSAE8ARgBJAEwARQApAHsALgAgACQAUABSAE8ARgBJAEwARQB9AA== -NoExit

Здесь -EncodedCommand следующий код:

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}

То есть отключите политику выполнения, запустив функцию, описанную в ответе Энди, а затем поставьте точку в текущем скрипте профиля пользователя, если он существует.