DotNetFiddle抛出" System.Security.SecurityException"

时间:2016-04-10 14:47:02

标签: c# powershell securityexception

由于目前没有PSFiddle可用,我想知道我是否可以通过在PS#中包装PS代码来使用DotNetFiddle。

我使用了以下代码:

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 个答案:

答案 0 :(得分:3)

完整的错误消息显示为:

  

运行时异常(第19行):'System.Management.Automation.Runspaces.RunspaceFactory'的类型初始值设定项引发异常。

     

堆栈追踪:

     

[System.Security.SecurityException:对'System.Security.Permissions.SecurityPermission,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'类型的权限的请求失败。]

     

[System.TypeInitializationException:'System.Management.Automation.Runspaces.RunspaceFactory'的类型初始值设定项引发异常。   在Program.RunPSScript(String script):第19行   在Program.Main():第14行

PowerShell必须在用户的上下文中运行,并且当System.Security.Permissions.SecurityPermission上抛出异常时,很可能意味着当前用户上下文没有运行PowerShell所需的权限或信任,并且没有创建一个运行空间并进行一些模拟,我想它正在尝试以非常可能拥有最小权限的webservice用户身份运行。

我只是在做假设,你可能需要联系Entech Solutions的优秀人员,以获得明确的答案,但希望这有助于回答你的问题。