2016-04-10 9 views
0

PSFiddleは現在利用できませんので、C#でPSコードをラップすることでDotNetFiddleを使用できるかどうか疑問に思っていました。DotNetFiddleは "System.Security.SecurityException"をスローします

私は以下のコードを使用:

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

'RunspaceFactory'型初期化子を選んだ後、' SecurityPermission(SecurityPermissionFlag.UnmanagedCode) 'パーミッションに完全な' Demand'を生成するP/Invoke呼び出しのため例外が発生すると言えます。非常に機密性の高い権限であるため、このサービスがサンドボックスに与えることはほとんどありません。サンドボックスはコードを呼び出すために使用します。 – PetSerAl

答えて

3

完全なエラーメッセージを読み取り:

実行時例外(ライン19):「System.Management.Automation.Runspaces.RunspaceFactory」のタイプ初期化子が例外をスローしました。

スタックトレース:

[System.Security.SecurityException :タイプの許可の要求 'System.Security.Permissions.SecurityPermission、mscorlib、バージョン= 4.0.0.0、文化=中立、なPublicKeyToken = b77a5c561934e089' 失敗しました。】

を[System.TypeInitializationException: 'System.Management.Automation.Runspaces.RunspaceFactory' のタイプ初期化子が例外をスローした] Program.RunPSScript(文字列スクリプト)で:。Program.Main(ATライン19 ) :行14

PowerShellはユーザーのコンテキストで実行する必要があり、System.Security.Permissions.SecurityPermissionに例外がスローされると、現在のユーザーコンテキストにPowerShellを実行するために必要なアクセス許可または信頼がなく、実行スペースを作成せずに偽装、私はそれが最小限の権限を持つ可能性が高いwebserviceユーザーとして実行しようとしていると思います。

私は仮定しているに過ぎず、Entech Solutionsの良い人に連絡して明確な答えを得なければならないかもしれませんが、うまくいけばあなたの質問に答えることができます。

+0

合意しました。これは信頼レベルの問題のように聞こえますが、私はそれを回避することはできません –

関連する問題