.ps1 не может быть загружен, потому что выполнение скриптов отключено в этой системе?

Я запускаю этот код для запуска силовой оболочки из приложения asp.net:

System.Management.Automation.Runspaces.Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace();
runspace.Open();
System.Management.Automation.Runspaces.Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(@"\\servername\path");

pipeline.Commands.Add("Out-String");

Collection<PSObject> results = pipeline.Invoke();

runspace.Close();

Но я получаю сообщение об ошибке:

.ps1 не может быть загружен, потому что выполнение скриптов отключено на этой системы. Подробнее см. "Get-help about_signing".

Тот же код отлично работает из командной строки или приложения windows (winform).

Ответ 1

Ваш script заблокирован от выполнения из-за политики выполнения.

Вам нужно установить его на клиентский ПК в Unrestricted. Вы можете сделать это, вызвав Invoke с помощью

Set-ExecutionPolicy Unrestricted

Ответ 2

Существуют определенные сценарии, в которых вы можете следовать шагам, предложенным в других ответах, убедиться, что политика выполнения установлена ​​правильно, и все еще не работают ваши сценарии. Если это произойдет с вами, вы, вероятно, находитесь на 64-битной машине с 32-разрядной и 64-разрядной версиями PowerShell, а сбой происходит в версии, которая не имеет установленной политики выполнения. Параметр не применяется к обоим версиям, поэтому вам нужно явно установить его дважды.

Посмотрите каталог Windows для System32 и SysWOW64.

Повторите эти шаги для каждого каталога:

  • Перейдите к WindowsPowerShell\v1.0 и запустите файл powershell.exe
  • Проверьте текущую настройку ExecutionPolicy:

    Get-ExecutionPolicy -List

  • Установите ExecutionPolicy для уровня и области, которую вы хотите, например:

    Set-ExecutionPolicy -Scope LocalMachine Unrestricted

Обратите внимание, что вам может потребоваться запустить PowerShell в качестве администратора в зависимости от области действия, для которой вы пытаетесь установить политику.

Здесь вы можете прочитать намного больше: Запуск сценариев Windows PowerShell

Ответ 3

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

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

Вероятно, есть способ установить это для пользователя ASP.NET, но этот способ означает, что вы не открываете всю свою систему, просто ваше приложение.

(Источник)

Ответ 4

вам нужно запустить set-executionpolicy:

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.

Set-ExecutionPolicy Restricted <-- Will not allow unsigned powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Will allow only remotely signed powershell scripts to run.

Надеюсь, это поможет!

Ответ 5

У меня была аналогичная проблема, и я заметил, что в CMD по умолчанию на Windows Server 2012 был запущен x64.

Для Windows 7, Windows 8, Windows Server 2008 R2 или Windows Server 2012 запустите следующие команды в качестве администратора:

x 86

Открыть C:\Windows\SysWOW64\cmd.exe Запустите команду: powershell Set-ExecutionPolicy RemoteSigned

64

Открыть C:\Windows\system32\cmd.exe Запустите команду powershell Set-ExecutionPolicy RemoteSigned

Вы можете проверить режим, используя

В CMD: echo% PROCESSOR_ARCHITECTURE% В Powershell: [Environment]:: Is64BitProcess

Надеюсь, это поможет вам.