2009-08-21 117 views
7

tengo el # siguiente código CEjecutar PowerShell como administrador desde C#

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

que me da la excepción

El acceso a la clave de registro 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell ' es denegado.

De acuerdo con this, la solución es iniciar PowerShell como administrador.

lo general, esto se puede lograr haciendo clic derecho en PowerShell y seleccionando la opción "Ejecutar como administrador". ¿Hay alguna manera de hacer esto programáticamente?

Respuesta

8

Comprobar this cabo

Es necesario para hacerse pasar como administrador para hacerlo (que, por supuesto necesitan credenciales de administrador)

Compruebe que el artículo, que también viene con el código listo para usar (no tengo utilizado y funciona muy bien)

Básicamente, usted tiene que hacer esto:

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

Esto no funciona para mí en Windows Server 2012 y PowerShell 3.0. :( – Anonymous

+3

me sorprende que el PO marcó esto como la respuesta. En la pregunta que él afirma "clic derecho en PowerShell y seleccionando 'Ejecutar como administrador'" lo que implica que las credenciales que se ejecuta bajo ya es un miembro del grupo de administradores pero están siendo detenidos por la maravillosa seguridad (tos, tos) que MS agregó llamada UAC. La solución publicada (y marcada como) no soluciona esto. Una parte de mí dice que marque esta publicación porque la respuesta no resuelve el problema. * * pregunta publicado ... – Jason

+0

Este es un código muy antiguo del proyecto de código. 2005. no va a funcionar en Windows 2012. tendría que encontrar la manera de convertirlo a 64 bits. –

2

privilegios administrativos son en t él aplicación nivel. La aplicación que necesita acceso de administrador en este caso es suya. 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, se puede elevar como dijo el otro cartel a pesar de la incorporación de nombres de usuario y contraseñas de administrador en el código fuente me hace sentir enfermo.

-Oisin

+1

doesn' t tiene que ho en el código fuente, mi fragmento es sólo un ejemplo – juan

0

creo un modelo alternativo sería para envolver el ejecutor PowerShell en un simple servicio web asp.net WebAPI.

El servicio web podría entonces ser configurado para ejecutarse con los permisos requeridos necesarios para hacer su trabajo. Puede proporcionar su propia seguridad para determinar qué clientes pueden llamarlo.

para ejecutar un script, usted acaba de llamar a los métodos de servicio web. Puede hacer que el método sea bastante general: nombre de script y params.

Es un poco más de trabajo, pero mucho más seguro (ver los pensamientos de x0n).

3

Sé que esto es una entrada antigua, pero nos encontramos con este mismo problema recientemente.

Tuvimos que alcance la directiva de ejecución en la máquina que ejecuta el código C# mediante la ejecución de las siguientes opciones en PowerShell ...

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted 

Cuando habíamos hecho esto antes, y sin alcance, estábamos preparando la directiva de ejecución para el administrador Visual Studio \ C# se estaba ejecutando como el usuario actual, haciendo que fallara con permisos insuficientes.

-2

Esta es una publicación relativamente muy antigua. Pero he encontrado una nueva forma de hacerlo. Estoy alojando la aplicación web de C# en IIS 8 que tiene algún código de PowerShell que deseo ejecutar con privilegios de administrador.

Así que proporcionan las credenciales de administrador en la configuración de la identidad del grupo de aplicaciones.

IIS8 on Windows 2012 server

Sólo tienes que configurar la cuenta de administrador en la identidad del grupo de aplicaciones.

Espero que esto ayude a nadie. :)

+0

siempre evitar esto, porque esto es grave falta de seguridad – devi

+0

su mucho mejor que mantener credenciales codificadas difícil ... :) @devi - pensar en ello una vez –

+0

no estuvo de acuerdo, que ejecuta IIS piscina como administrador local es muy mala idea, nada otro no puede ser más malo, incluso codificar. En general, el requisito de ejecutar algo como administrador local en una aplicación web es señal de un diseño deficiente. – devi

Cuestiones relacionadas