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 для четкого ответа, но, надеюсь, это поможет ответить на ваш вопрос.