我正在构建一个 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 对象,这似乎是正确的事情,但我仍然无法弄清楚如何将它插入到整个 session 中(关于将它用作参数的大量信息需要凭据的 cmdlet)
最佳答案
我有一个 ASP.NET 站点需要共享权限才能运行 EXE 和 .BAT 文件。
此示例使用应用程序池和本地帐户,您也可以使用域帐户。
- 在服务器上创建一个本地帐户(使其成为服务器上的管理员)
- 授予该帐户对 powershell 脚本所在文件夹的全部权限。
- 创建一个新的 IIS 池并将帐户设置为在这个新的本地帐户下运行
- 在 IIS 中更改您的站点以使用这个新池
关于c# - ASP.Net 应用程序作为 IIS_USR 执行 powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661170/