Exécuter PowerShell en tant qu’administrateur à partir de C #

J’ai le code C # suivant

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

ce qui me donne l’exception

L’access à la clé de registre ‘HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell’ est refusé.

Selon cela , la solution consiste à démarrer PowerShell en tant qu’administrateur.

Pour ce faire, vous pouvez normalement cliquer avec le bouton droit de la souris sur PowerShell et sélectionner “Exécuter en tant qu’administrateur”. Y at-il un moyen de faire cela par programme?

Vérifiez ceci

Pour ce faire, vous devez vous faire passer pour un administrateur (vous aurez évidemment besoin des informations d’identification de l’administrateur).

Vérifiez cet article, qui vient également avec le code prêt à l’emploi (je l’ai utilisé et cela fonctionne très bien)

En gros, vous devez faire ceci:

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

Je sais que ceci est un ancien post, mais nous avons rencontré le même problème récemment.

Nous avons dû définir la stratégie d’exécution sur la machine exécutant le code C # en exécutant les opérations suivantes à partir de PowerShell …

 Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unressortingcted 

Lorsque nous avions déjà effectué cette opération, sans définir de scope, nous définissions la stratégie d’exécution pour l’administrateur. Visual Studio \ C # était en cours d’exécution en tant qu’utilisateur actuel, ce qui a échoué avec des permissions insuffisantes.

Les privilèges d’administrateur sont au niveau de l’ application . L’application qui nécessite un access administrateur dans ce cas est la vôtre . La création d’espaces d’exécution en C # dans une application personnalisée n’appelle pas l’application PowerShell – elle ne fait que charger certains assemblys dans votre application.

Cela dit, vous pouvez vous élever comme le dit l’autre affiche, bien que l’incorporation de noms d’utilisateur et de mots de passe d’administrateur dans le code source me rende malade.

-Oisin

Je pense qu’un autre modèle serait d’envelopper l’exécuteur powershell dans un simple webservice asp.net webapi.

Le service Web peut ensuite être configuré pour s’exécuter avec les permissions requirejses pour effectuer son travail. Il peut fournir sa propre sécurité pour déterminer quels clients peuvent l’appeler.

Pour exécuter un script, il vous suffit d’appeler des méthodes webservice. Vous pouvez rendre la méthode assez générale – nom du script et parameters.

C’est un peu plus de travail, mais beaucoup plus sécurisé (voir les pensées de x0n).

Ssortingctement pour l’environnement DEV Ceci est un post relativement très ancien. Mais j’ai trouvé une nouvelle façon de faire cela. J’héberge l’API web C # sur IIS 8 avec un code Powershell que je veux exécuter avec des privilèges d’administrateur.

J’ai donc fourni les informations d’identification de l’administrateur dans le paramètre d’identité du pool d’applications.

IIS8 sur le serveur Windows 2012

Il suffit de définir un compte administrateur dans l’identité du pool d’applications.

J’espère que cela aide à n’importe qui. 🙂