Ответ 1
Ваш script заблокирован от выполнения из-за политики выполнения.
Вам нужно установить его на клиентский ПК в Unrestricted. Вы можете сделать это, вызвав Invoke с помощью
Set-ExecutionPolicy Unrestricted
Я запускаю этот код для запуска силовой оболочки из приложения 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).
Ваш script заблокирован от выполнения из-за политики выполнения.
Вам нужно установить его на клиентский ПК в Unrestricted. Вы можете сделать это, вызвав Invoke с помощью
Set-ExecutionPolicy Unrestricted
Существуют определенные сценарии, в которых вы можете следовать шагам, предложенным в других ответах, убедиться, что политика выполнения установлена правильно, и все еще не работают ваши сценарии. Если это произойдет с вами, вы, вероятно, находитесь на 64-битной машине с 32-разрядной и 64-разрядной версиями PowerShell, а сбой происходит в версии, которая не имеет установленной политики выполнения. Параметр не применяется к обоим версиям, поэтому вам нужно явно установить его дважды.
Посмотрите каталог Windows для System32 и SysWOW64.
Повторите эти шаги для каждого каталога:
Проверьте текущую настройку ExecutionPolicy:
Get-ExecutionPolicy -List
Установите ExecutionPolicy для уровня и области, которую вы хотите, например:
Set-ExecutionPolicy -Scope LocalMachine Unrestricted
Обратите внимание, что вам может потребоваться запустить PowerShell в качестве администратора в зависимости от области действия, для которой вы пытаетесь установить политику.
Здесь вы можете прочитать намного больше: Запуск сценариев Windows PowerShell
Проблема заключается в том, что политика выполнения устанавливается для каждого пользователя. Вам нужно будет запустить следующую команду в своем приложении каждый раз, когда вы запустите ее, чтобы она могла работать:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Вероятно, есть способ установить это для пользователя ASP.NET, но этот способ означает, что вы не открываете всю свою систему, просто ваше приложение.
(Источник)
вам нужно запустить 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.
Надеюсь, это поможет!
У меня была аналогичная проблема, и я заметил, что в 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
Надеюсь, это поможет вам.