ASP.Net应用程序将powershell脚本作为IIS_USR执行

我正在构建一个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.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(或类似)的forms执行。

我需要找到一种方法让IIS服务器以当前登录用户的身份执行脚本(使用Windows身份validation( ))。

我已经看过http://stackoverflow.com/questions/10837377/loginview-and-passing-credentials-to-powershell ,虽然看起来它可能会起作用,但我对这个想法并不满意。

在我看来,我应该能够使用一些C#代码执行此操作,就像在上面的代码块中一样,但是我一直无法通过我的搜索来完成任何操作。

如何在C#中创建一个PowerShell环境,该环境将作为登录用户执行(如果需要,我会满足于重新询问凭据)

谢谢

编辑1

我已经查看了PSCredential对象,这似乎是正确的事情,但我仍然无法弄清楚如何将它插入到整个会话中(有关将其用作cmdlet参数的大量信息)需要凭证)

我有一个ASP.NET站点,需要权限共享来运行EXE和.BAT文件。

此示例使用应用程序池和本地帐户,您也可以使用域帐户。

  1. 在服务器上创建本地帐户(使其成为服务器上的管理员)
  2. 授予该帐户对powershell脚本所在文件夹的完全权限。
  3. 创建新的IIS池并将帐户设置为在此新的本地帐户下运行
  4. 在IIS中更改您的站点以使用此新池

虽然您可以这样做,但安全隐患并不是很好。

对于类似的要求,我们创建了一个服务层来处理传入脚本或命令的传入请求,并将它们存储在客户端以便拉出队列并执行它们。

客户端可以是Windows服务,也可以只是在计算机上运行的脚本。

Web应用程序无法访问运行它的计算机或网络上的本地资源,这是一个很好的理由。

如果您仍想这样做,只需将应用程序池配置为使用上面建议的其他标识。