Запуск Powershell из C # выдает ошибку: `запуск сценариев отключен в этой системе` - PullRequest
2 голосов
/ 04 июня 2019

В моем приложении на C # я пытаюсь создать RunSpace для вызова некоторых скриптов Powershell. Однако, когда он достигает кода для его фактического создания, происходит сбой с ошибкой ниже:

var implementedHost = new implementedPSHost();
using (var rs = RunspaceFactory.CreateRunspace(customPSHost))
{

cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.At line:1 char:3+ . .\Scripts\loadFunctions.ps1+

Как и предлагалось в другом месте, я запустил окно Powershell и выполнил Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted, но это не помогло. Ошибка все еще случается. У кого-нибудь есть идеи как это исправить?

1 Ответ

0 голосов
/ 04 июня 2019

Попробуйте выполнить свой шаг Set-ExecutionPolicy -Scope CurrentUser в пространстве выполнения, как это.

Во-первых, с моим ExecutionPolicy для этого пользователя в Restricted, и я вижу следующую ошибку при запуске этого кода:

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

            using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
            {
                runspace.Open();
                RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
                //scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted -Scope CurrentUser ");
                Pipeline pipeline = runspace.CreatePipeline();
                Command scriptCommand = new Command("C:\\temp\\test.ps1");
                Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();

                pipeline.Commands.Add(scriptCommand);
                Collection<PSObject> psObjects;
                psObjects = pipeline.Invoke();
            }


 RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
 scriptInvoker.Invoke("Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted");

дает мне

System.Management.Automation.PSSecurityException: «Файл C: \ temp \ test.ps1 не может быть загружен, так как в этой системе отключены запущенные сценарии. Для получения дополнительной информации см. About_Execution_Policies по адресу https: /go.microsoft.com/fwlink/? LinkID = 135170. '

Далее я перезапускаю ее, раскомментируя эту строку:

scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted -Scope CurrentUser ");

И без ошибок! Однако это изменит пользователей ExecutionPolicy , что, на мой взгляд, является плохим поведением, поэтому вместо этого я собираюсь обернуть свою функцию этим и установить Users ExecutionPolicy обратно так, как я его нашел.

using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
            {
                runspace.Open();
                RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
                scriptInvoker.Invoke("$ExecutionPolicy = Get-ExecutionPolicy -Scope CurrentUser");
                scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted -Scope CurrentUser ");
                Pipeline pipeline = runspace.CreatePipeline();
                Command scriptCommand = new Command("C:\\temp\\test.ps1");
                Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();

                pipeline.Commands.Add(scriptCommand);
                Collection<PSObject> psObjects;
                psObjects = pipeline.Invoke();
                scriptInvoker.Invoke("Set-ExecutionPolicy -Scope CurrentUser $ExecutionPolicy -Force");
            }

Теперь наша функция работает, и мы не вмешиваемся в системные настройки пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...