2016-04-10 2 views
0

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?

+1

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

Antwort

3

Die vollständige Fehlermeldung lautet:

Laufzeitausnahme (Zeile 19): Der Typ Initialisierer für ‚System.Management.Automation.Runspaces.RunspaceFactory‘ eine Ausnahme ausgelöst.

Stack Trace:

[System.Security.SecurityException: Antrag auf Genehmigung des Typs 'System.Security.Permissions.SecurityPermission mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' ist fehlgeschlagen .]

[System.TypeInitializationException: Der Typ Initialisierer für 'System.Management.Automation.Runspaces.RunspaceFactory' eine Ausnahme geworfen] bei Program.RunPSScript (String-Skript). 19 bei Program.Main Linie() : Linie 14

PowerShell muss im Kontext eines Benutzers ausgeführt werden, und wenn eine Ausnahme auf System.Security.Permissions.SecurityPermission geworfen wird, bedeutet dies höchstwahrscheinlich, dass der aktuelle Benutzerkontext nicht über die erforderlichen Berechtigungen oder die erforderliche Vertrauensstellung zum Ausführen von PowerShell und ohne das Erstellen eines Runspace verfügt Identitätswechsel, ich stelle mir vor, dass es versucht, als der Webservice-Benutzer zu laufen, der höchstwahrscheinlich minimale Berechtigungen hat.

Ich mache nur Vermutungen, und Sie müssen wahrscheinlich die guten Leute bei Entech Solutions für eine klare Antwort kontaktieren, aber hoffentlich hilft dies bei der Beantwortung Ihrer Frage.

+0

Einverstanden, das klingt nach einem Vertrauenslevel, ich würde nicht damit rechnen, dass ich es umgehen könnte –

Verwandte Themen