DotNetFiddle выдает "System.Security.SecurityException"

Поскольку в настоящее время PSFiddle не доступен, я подумал, смогу ли я использовать DotNetFiddle для этой цели, обернув код PS в C#.

Я использовал следующий код:

using System;
using System.Collections.ObjectModel;
using System.Management.Automation;     //if run on your machine, first ensure Windows SDK is installed (https://www.microsoft.com/en-us/download/details.aspx?id=11310)

public class Program
{
    public static void Main()
    {
        string script = @"
            param([string]$name) 
            ""hello $name"" #NB:Double quotes have to be escaped; otherwise all's good
            "; 
        RunPSScript(script);
    }
    private static void RunPSScript(string script) {
        using (PowerShell ps = PowerShell.Create())
        {
            ps.AddScript(script);
            ps.AddParameter("name", "Player One");
            Collection<PSObject> psOutput = ps.Invoke();
            foreach(PSObject item in psOutput) {
                if(item != null) {
                    Console.WriteLine(item.BaseObject.ToString());
                }
            }
        }
    }
}

При запуске в DotNetFiddle это бросает System.Security.SecurityException ошибка.

Это можно найти здесь: https://dotnetfiddle.net/B4JLU0

Код работает при запуске на моей локальной машине, поэтому я предполагаю, что проблема связана с безопасностью на DotNetFiddle.

Вопрос

Есть ли обходной путь, чтобы разрешить это / избежать исключения; или это просто невозможно?

1 ответ

Решение

Полное сообщение об ошибке гласит:

Исключение во время выполнения (строка 19): инициализатор типа для System.Management.Automation.Runspaces.RunspaceFactory вызвал исключение.

Трассировки стека:

[System.Security.SecurityException: сбой запроса разрешения типа 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=b77a5c561934e089'].

[System.TypeInitializationException: инициализатор типа для 'System.Management.Automation.Runspaces.RunspaceFactory' вызвал исключение.] В Program.RunPSScript(String script): строка 19 в Program.Main(): строка 14

PowerShell должен работать в контексте пользователя и при возникновении исключения System.Security.Permissions.SecurityPermissionэто, скорее всего, означает, что текущий пользовательский контекст не имеет необходимых разрешений или доверия для запуска PowerShell, и, не создавая пространство выполнения и не выполняя какое-либо олицетворение, я полагаю, что он пытается работать как пользователь веб-службы, который, скорее всего, имеет минимальные разрешения.

Я только делаю предположения, и вам, вероятно, придется связаться с хорошими людьми в Entech Solutions для четкого ответа, но, надеюсь, это поможет ответить на ваш вопрос.

Другие вопросы по тегам