Ответ 1
Это то, что мы используем для запуска сценариев PowerShell с Java (работает независимо от политики выполнения):
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File <script_name>
Команда Set-ExecutionPolicy для PowerShell запрещена, поэтому я НЕ могу запустить ее следующим образом:
PS> .\script.ps1 (enter)
Есть ли другой способ запустить сценарий PowerShell, кроме как из "Windows PowerShell ISE"?
PS: Я смог использовать Java ProccessBuilder для запуска одной команды PowerShell, но не знаю, как запустить весь скрипт.
Это то, что мы используем для запуска сценариев PowerShell с Java (работает независимо от политики выполнения):
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File <script_name>
Самый простой способ - это просто:
gc .\script.ps1 | iex
Это работает в PowerShell и не заботится о ExecutionPolicy
. Просто убедитесь, что вы осторожны с новыми символами. Хранить {}
и т.п. в одной строке, используя ;
где это необходимо.
У 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
Это удаляет менеджер авторизации хоста по умолчанию, который позволит вам вызывать скрипты из этой оболочки. Вам придется запускать это для каждой открытой оболочки, поскольку, поскольку политика выполнения переопределяется только в оболочке, в которой она запущена.
15 способов обхода политики выполнения PowerShell
У меня нет фаворита - я их всех ненавижу.
Это небольшое улучшение для ответа Энди на этот вопрос. Если администратор устанавливает ограничительную политику выполнения сценариев 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}
То есть отключите политику выполнения, запустив функцию, описанную в ответе Энди, а затем поставьте точку в текущем скрипте профиля пользователя, если он существует.