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上のセキュリティが原因であると仮定します。
質問
これを可能にする回避策があります/例外を回避。またはこれは単に不可能ですか?
'RunspaceFactory'型初期化子を選んだ後、' SecurityPermission(SecurityPermissionFlag.UnmanagedCode) 'パーミッションに完全な' Demand'を生成するP/Invoke呼び出しのため例外が発生すると言えます。非常に機密性の高い権限であるため、このサービスがサンドボックスに与えることはほとんどありません。サンドボックスはコードを呼び出すために使用します。 – PetSerAl