繁体   English   中英

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

[英]ASP.Net application executing powershell scripts as 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(或类似)的形式执行。

我需要找到一种方法让IIS服务器以当前登录用户身份执行脚本(使用Windows身份验证( <authentication mode="Windows" /> ))。

我已经看过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应用程序无法访问运行它的计算机或网络上的本地资源,这是一个很好的理由。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM