Emmett Emmett - 4 months ago 174
PowerShell Question

Execute PowerShell as an administrator from C#

I have the following C# code

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


which gives me the exception


Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell'
is denied.


According to this, the solution is to start PowerShell as an administrator.

Ordinarily, this can be accomplished by right-clicking PowerShell and selecting "Run as Administrator". Is there a way to do this programmatically?

Answer

Check this out

You need to impersonate as an administrator to do it (you will of course need administrator credentials)

Check that article, that also comes with code ready to use (I've used it and it works great)

Basically, you need to do this:

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