我正在构建一个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环境(如果需要,我会满足于重新询问凭据)
由于
我已经查看了PSCredential对象,这似乎是正确的事情,但我仍然无法弄清楚如何将其插入到整个会话中(有关将其用作一个会话的大量信息)需要凭据的cmdlet参数
答案 0 :(得分:1)
我有一个ASP.NET站点,需要权限来共享以运行EXE和.BAT文件。
此示例使用的是应用程序池和本地帐户,您也可以使用域帐户。
答案 1 :(得分:0)
虽然您可以这样做,但安全隐患并不是很好。
对于类似的要求,我们创建了一个服务层来处理传入脚本或命令的传入请求,并将它们存储在客户端以便拉出队列并执行它们。
客户端可以是Windows服务,也可以只是机器上运行的脚本。
有一个很好的理由是,Web应用程序无法访问运行它的计算机或网络上的本地资源。
如果您仍想这样做,只需将应用程序池配置为使用上面建议的其他标识。