首页 文章

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

提问于
浏览
9

我有以下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 回答

  • 1

    Strictly for DEV environment 这是相对很老的帖子 . 但我找到了一种新方法 . 我在IIS 8上托管C#web api,其中包含一些我想以管理员权限运行的powershell代码 .

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

    IIS8 on Windows 2012 server

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

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

  • 0

    检查this

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

    检查那篇文章,其中还附带了可以使用的代码(我已经使用过它并且效果很好)

    基本上,你需要这样做:

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

    我知道这是一个老帖子,但我们最近遇到了同样的问题 .

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

    Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
    

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

  • 7

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

    也就是说,你可以像其他海报所说的那样提升,尽管将管理员用户名和密码嵌入到源代码中让我感到不舒服 .

    -Oisin

  • -1

    我认为另一种模式是将powershell Actuator 包装成一个简单的asp.net webapi webservice .

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

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

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

相关问题