我有以下C#代码
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
// ...
}
这给了我一个例外
拒绝访问注册表项“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell” .
根据this,解决方案是以管理员身份启动PowerShell .
通常,可以通过右键单击PowerShell并选择“以管理员身份运行”来完成此操作 . 有没有办法以编程方式执行此操作?
5 回答
Strictly for DEV environment 这是相对很老的帖子 . 但我找到了一种新方法 . 我在IIS 8上托管C#web api,其中包含一些我想以管理员权限运行的powershell代码 .
所以我在应用程序池标识设置中提供了管理员凭据 .
只需在应用程序池标识中设置管理员帐户
希望这对任何人都有帮助 . :)
检查this
您需要以管理员身份进行模拟(您当然需要管理员凭据)
检查那篇文章,其中还附带了可以使用的代码(我已经使用过它并且效果很好)
基本上,你需要这样做:
我知道这是一个老帖子,但我们最近遇到了同样的问题 .
我们必须通过从PowerShell运行以下内容来在运行C#代码的机器上确定执行策略的范围...
当我们之前完成此操作而没有确定范围时,我们正在为Administrator设置执行策略 . Visual Studio \ C#作为当前用户运行,导致其失败且权限不足 .
管理权限在应用程序级别 . 在这种情况下需要管理员访问权限的应用程序是您的 . 在自定义应用程序中使用C#创建运行空间不会调用应用程序的powershell - 它只是将一些程序集加载到您的应用程序中 .
也就是说,你可以像其他海报所说的那样提升,尽管将管理员用户名和密码嵌入到源代码中让我感到不舒服 .
-Oisin
我认为另一种模式是将powershell Actuator 包装成一个简单的asp.net webapi webservice .
然后,可以将Web服务配置为使用执行此任务所需的必需权限运行 . 它可以提供自己的安全性来确定哪些客户端可以调用它 .
要执行脚本,只需调用webservice方法即可 . 您可以使该方法非常通用 - 脚本名称和参数 .
这是一项更多的工作,但更安全(参见x0n的想法) .