scripts - Ejecute PowerShell como administrador desde C#
habilitar la ejecucion de scripts powershell (5)
Tengo el siguiente código C #
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
// ...
}
que me da la excepción
Se deniega el acceso a la clave de registro ''HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / PowerShell / 1 / ShellIds / Microsoft.PowerShell''.
De acuerdo con esto , la solución es iniciar PowerShell como administrador.
Normalmente, esto se puede lograr haciendo clic derecho en PowerShell y seleccionando "Ejecutar como administrador". ¿Hay alguna manera de hacer esto programáticamente?
Mira esto
Debe hacerse pasar por un administrador para hacerlo (por supuesto, necesitará credenciales de administrador)
Revisa ese artículo, que también viene con código listo para usar (lo he usado y funciona muy bien)
Básicamente, necesitas hacer esto:
using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
}
}
Los privilegios administrativos están en el nivel de aplicación . La aplicación que necesita acceso de administrador en este caso es tuya . La creación de espacios de ejecución en C # en una aplicación personalizada no invoca a powershell la aplicación, solo carga algunos ensambles en su aplicación.
Dicho esto, puedes elevarte como dijo el otro cartel, aunque incorporar nombres de usuario y contraseñas de administrador en el código fuente me hace sentir mal.
-Oisin
Creo que un modelo alternativo sería envolver al ejecutor de powershell en un simple servicio web asp.net webapi.
El servicio web podría configurarse para ejecutarse con los permisos necesarios para hacer su trabajo. Puede proporcionar su propia seguridad para determinar qué clientes pueden llamarlo.
Para ejecutar un script, simplemente llama a los métodos del servicio web. Puede hacer que el método sea bastante general: nombre de script y params.
Es un poco más trabajo, pero mucho más seguro (vea los pensamientos de x0n).
Sé que esta es una publicación anterior, pero nos encontramos con este mismo problema recientemente.
Tuvimos que determinar la política de ejecución en la máquina que ejecuta el código C # ejecutando lo siguiente desde PowerShell ...
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Cuando hicimos esto previamente, sin determinar el alcance, estábamos configurando la política de ejecución para el Administrador. Visual Studio / C # se estaba ejecutando como el usuario actual, haciendo que fallara con permisos insuficientes.
Esta es una publicación relativamente muy antigua. Pero he encontrado una nueva forma de hacer esto. Estoy alojando la aplicación web de C # en IIS 8 con algunos códigos de PowerShell que deseo ejecutar con privilegios de administrador.
Así que proporcioné las credenciales de administrador en la configuración de identidad del grupo de aplicaciones.
Simplemente configure la cuenta de administrador en la identidad del grupo de aplicaciones.
Espero que esto ayude a cualquiera. :)