由于目前没有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的安全性。
问题
是否有解决方法允许/避免异常;或者这根本不可能?
答案 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的优秀人员,以获得明确的答案,但希望这有助于回答你的问题。