C# ASP.Net应用程序作为IIS\u USR执行powershell脚本
我正在构建一个asp.net mvc应用程序,它将作为我们为管理日常任务而编写的许多powershell脚本的包装器运行(最终目标是使非技术人员更容易使用这些脚本) 我成功地使脚本执行得很好:C# ASP.Net应用程序作为IIS\u USR执行powershell脚本,c#,asp.net,asp.net-mvc,powershell,credentials,C#,Asp.net,Asp.net Mvc,Powershell,Credentials,我正在构建一个asp.net mvc应用程序,它将作为我们为管理日常任务而编写的许多powershell脚本的包装器运行(最终目标是使非技术人员更容易使用这些脚本) 我成功地使脚本执行得很好: var ctx = System.Web.HttpContext.Current; var file = ctx.Server.MapPath("~/Content/Powershell/psStoreLive.ps1"); #activate a store var shell = PowerShell
var ctx = System.Web.HttpContext.Current;
var file = ctx.Server.MapPath("~/Content/Powershell/psStoreLive.ps1"); #activate a store
var shell = PowerShell.Create();
shell.AddCommand(file);
shell.AddArgument(o.DBName); # which store should we activate
var results = shell.Invoke(); # and then process the results....display output of script
问题是脚本是以IIS_USR(或类似)的形式执行的
我需要找到一种方法让IIS服务器以当前登录用户的身份执行脚本(使用Windows身份验证(
)
我看过http://stackoverflow.com/questions/10837377/loginview-and-passing-credentials-to-powershell
虽然这看起来可能会奏效,但我对这个想法并不满意
在我看来,我应该可以用一些C#代码来实现这一点,就像上面的代码块一样,但我无法用搜索找到任何可以实现这一点的东西
如何在C#中创建一个以登录用户身份执行的powershell环境(如果需要,我甚至可以重新请求凭据)
谢谢
编辑1
我已经查看了PSCredential对象,这似乎是正确的类型,但我仍然不知道如何将其插入到整个会话中(关于将其用作需要凭据的cmdlet的参数的大量信息)我有一个ASP.NET站点,它需要共享权限才能运行EXEs和.BAT文件 本例使用应用程序池和本地帐户,您也可以使用域帐户
尽管您可能能够做到这一点,但安全性方面的影响并不是很好 对于类似的需求,我们创建了一个服务层,用于处理传入的请求以运行脚本或命令,并存储它们,以便客户端将它们从队列中拉出来并执行它们 客户端可以是windows服务,也可以只是计算机上运行的脚本 web应用程序无法访问其运行的计算机或网络上的本地资源有一个很好的理由
如果仍要执行此操作,只需按照上述建议将应用程序池配置为使用不同的标识。您所说的当前登录用户是什么意思?当前登录到应用程序?如果是的话,你如何认证他们?道歉。我正在使用Windows身份验证(
),因此它们将针对我的域进行身份验证。你看过这个@KeithHill吗?没有,我没有看到。我现在正在看,它看起来是相同的(一般)想法…FWIW,我在过去做过这件事,它是大量的编码,但它非常类似于@KeithHill的建议中的代码,我必须直接使用Windows API。我打算在这里发布一些,但我在做表单身份验证,而不是Windows,所以是使用密码生成令牌。听起来你也许可以从当前的上下文中得到它。