Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net应用程序作为IIS\u USR执行powershell脚本_C#_Asp.net_Asp.net Mvc_Powershell_Credentials - Fatal编程技术网

C# ASP.Net应用程序作为IIS\u USR执行powershell脚本

C# ASP.Net应用程序作为IIS\u USR执行powershell脚本,c#,asp.net,asp.net-mvc,powershell,credentials,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

我正在构建一个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身份验证(

我看过
http://stackoverflow.com/questions/10837377/loginview-and-passing-credentials-to-powershell
虽然这看起来可能会奏效,但我对这个想法并不满意

在我看来,我应该可以用一些C#代码来实现这一点,就像上面的代码块一样,但我无法用搜索找到任何可以实现这一点的东西

如何在C#中创建一个以登录用户身份执行的powershell环境(如果需要,我甚至可以重新请求凭据)

谢谢

编辑1
我已经查看了PSCredential对象,这似乎是正确的类型,但我仍然不知道如何将其插入到整个会话中(关于将其用作需要凭据的cmdlet的参数的大量信息)

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

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

  • 在服务器上创建本地帐户(使其成为服务器上的管理员)
  • 授予该帐户对powershell脚本所在文件夹的完全权限
  • 创建新的IIS池并将帐户设置为在此新本地帐户下运行
  • 在IIS中更改站点以使用此新池

  • 尽管您可能能够做到这一点,但安全性方面的影响并不是很好

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

    客户端可以是windows服务,也可以只是计算机上运行的脚本

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


    如果仍要执行此操作,只需按照上述建议将应用程序池配置为使用不同的标识。

    您所说的当前登录用户是什么意思?当前登录到应用程序?如果是的话,你如何认证他们?道歉。我正在使用Windows身份验证(
    ),因此它们将针对我的域进行身份验证。你看过这个@KeithHill吗?没有,我没有看到。我现在正在看,它看起来是相同的(一般)想法…FWIW,我在过去做过这件事,它是大量的编码,但它非常类似于@KeithHill的建议中的代码,我必须直接使用Windows API。我打算在这里发布一些,但我在做表单身份验证,而不是Windows,所以是使用密码生成令牌。听起来你也许可以从当前的上下文中得到它。