从C#以管理员身份执行PowerShell

时间:2009-08-21 18:56:55

标签: c# powershell

我有以下C#代码

using (RunspaceInvoke invoker = new RunspaceInvoke())
{
  invoker.Invoke("Set-ExecutionPolicy Unrestricted");
  // ...
}

给了我例外

  

访问注册表项   'HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell'   被拒绝。

根据this,解决方案是以管理员身份启动PowerShell。

通常,可以通过右键单击PowerShell并选择“以管理员身份运行”来完成此操作。有没有办法以编程方式执行此操作?

5 个答案:

答案 0 :(得分:5)

检查this

您需要以管理员身份进行模拟(您当然需要管理员凭据)

检查那篇文章,该代码还随附代码(我已经使用过它并且效果很好)

基本上,你需要这样做:

using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
    using (RunspaceInvoke invoker = new RunspaceInvoke())
    {
        invoker.Invoke("Set-ExecutionPolicy Unrestricted");
    }
}

答案 1 :(得分:4)

我知道这是一篇旧帖子,但最近我们遇到了同样的问题。

我们必须通过在PowerShell中运行以下内容来在运行C#代码的计算机上确定执行策略的范围...

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

当我们之前完成此操作而没有确定范围时,我们正在为Administrator设置执行策略。 Visual Studio \ C#作为当前用户运行,导致其失败且权限不足。

答案 2 :(得分:2)

管理权限位于应用程序级别。在这种情况下需要管理员访问权限的应用是你的。在自定义应用程序中使用C#创建运行空间不会调用应用程序的powershell - 它只是将一些程序集加载到您的应用程序中。

也就是说,你可以像其他海报所说的那样提升,虽然将管理员用户名和密码嵌入源代码会让我感到不适。

-Oisin

答案 3 :(得分:0)

我认为另一种模式是将powershell执行器包装到一个简单的asp.net webapi webservice中。

然后,可以将Web服务配置为使用执行此任务所需的必需权限运行。它可以提供自己的安全性来确定哪些客户端可以调用它。

要执行脚本,您只需调用webservice方法即可。你可以使方法非常通用 - 脚本名称和参数。

这是一项更多的工作,但更安全(参见x0n的想法)。

答案 4 :(得分:-1)

严格适用于DEV环境 这是相对很老的帖子。 但我找到了一种新方法。 我在IIS 8上托管了C#web api,它有一些我想以管理员权限运行的powershell代码。

所以我在应用程序池标识设置中提供了管理员凭据。

IIS8 on Windows 2012 server

只需在应用池标识中设置管理员帐户。

希望这对任何人都有帮助。 :)