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

时间:2014-10-30 18:55:51

标签: 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.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身份验证(<authentication mode="Windows" />))。

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

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

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

由于

编辑1

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

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

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