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

Emm*_*ett 10 c# powershell

我有以下C#代码

using (RunspaceInvoke invoker = new RunspaceInvoke())
{
  invoker.Invoke("Set-ExecutionPolicy Unrestricted");
  // ...
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个例外

访问注册表项"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"被拒绝.

根据,解决的办法是启动PowerShell中以管理员身份.

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

jua*_*uan 5

检查

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

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

基本上,你需要这样做:

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

  • 我很惊讶OP将此标记为答案.在他提出的问题中,他说"右键单击PowerShell并选择'以管理员身份运行'",这意味着他们运行的凭据已经是管理员组的成员,但是他们正被极好的安全(咳嗽,咳嗽)所阻止. MS补充称为UAC.发布的解决方案(以及已签出的解决方案)未解决此问题.我的一部分说要记下这篇文章因为答案没有解决*贴*问题...... (6认同)

小智 5

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

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

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Run Code Online (Sandbox Code Playgroud)

当我们之前完成此操作时,在没有范围界定的情况下,我们正在为管理员设置执行策略。Visual Studio \ C# 以当前用户身份运行,导致其因权限不足而失败。