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

本文关键字:ASP Net 应用程序 脚本 powershell IIS USR 执行 作为 | 更新日期: 2023-09-27 18:28:26

我正在构建一个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的参数的大量信息)

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

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

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

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

尽管您可能能够做到这一点,但安全隐患并不是很好。

对于类似的需求,我们创建了一个服务层,用于处理运行脚本或命令的传入请求,并将其存储给客户端,以便将其从队列中提取并执行。

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

web应用程序无法访问其运行的计算机或网络上的本地资源是有充分理由的。

如果您无论如何都想这样做,只需将应用程序池配置为使用上面建议的不同标识即可。