Da derzeit kein PSFiddle verfügbar ist, habe ich mich gefragt, ob ich DotNetFiddle für diesen Zweck verwenden könnte, indem ich den PS-Code in C# verpacke.DotNetFiddle wirft "System.Security.SecurityException"
habe ich den folgenden Code:
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());
}
}
}
}
}
Wenn in DotNetFiddle führt dies wirft einen System.Security.SecurityException
Fehler.
Dies ist hier zu finden: https://dotnetfiddle.net/B4JLU0
Der Code funktioniert, wenn auf meinem lokalen Rechner laufen, so nehme ich an das Thema Sicherheit auf DotNetFiddle zurückzuführen ist.
Frage
Gibt es eine Abhilfe dies zu ermöglichen/verhindern die Ausnahme; oder ist das einfach nicht möglich?
Nach der Auswahl in RunspaceFactory Typ Initialisierer, kann ich sagen, dass Ausnahme aufgrund P/Invoke Aufruf, die volle 'Nachfrage' auf SecurityPermission (SecurityPermissionFlag.UnmanagedCode) 'Erlaubnis generieren. Da es sich um eine sehr sensible Berechtigung handelt, ist es unwahrscheinlich, dass es der Sandbox gewährt wird, die dieser Dienst zum Aufrufen Ihres Codes verwendet. – PetSerAl