Запустите PowerShell в качестве администратора из C # - PullRequest
10 голосов
/ 21 августа 2009

У меня есть следующий код C #

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

, что дает мне исключение

Доступ к разделу реестра 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' отказано.

Согласно это , решение состоит в том, чтобы запустить PowerShell от имени администратора.

Обычно это можно сделать, щелкнув правой кнопкой мыши PowerShell и выбрав «Запуск от имени администратора». Есть ли способ сделать это программно?

Ответы [ 5 ]

5 голосов
/ 21 августа 2009

Проверьте это из

Для этого вам нужно выдать себя за администратора (вам, конечно, понадобятся учетные данные администратора)

Проверьте эту статью, которая также поставляется с кодом, готовым к использованию (я использовал его, и он отлично работает)

По сути, вам нужно сделать следующее:

using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
    using (RunspaceInvoke invoker = new RunspaceInvoke())
    {
        invoker.Invoke("Set-ExecutionPolicy Unrestricted");
    }
}
4 голосов
/ 01 марта 2013

Я знаю, что это старый пост, но мы недавно столкнулись с этой же проблемой.

Нам пришлось ограничить политику выполнения на машине с кодом C #, выполнив следующую команду из PowerShell ...

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

Когда мы делали это ранее, не ограничиваясь, мы устанавливали политику выполнения для Администратора. Visual Studio \ C # работал как текущий пользователь, что приводило к сбою с недостаточными разрешениями.

2 голосов
/ 24 августа 2009

Административные привилегии на уровне приложения . Приложение, которому нужен доступ администратора, в этом случае ваше . Создание пространств выполнения в C # в пользовательском приложении не вызывает powershell приложения - оно просто загружает некоторые сборки в ваше приложение.

Тем не менее, вы можете подняться, как сказал другой автор, хотя от встраивания имен пользователей и паролей администратора в исходный код мне становится плохо.

-Oisin

0 голосов
/ 04 августа 2016

Строго для среды DEV Это относительно очень старый пост. Но я нашел новый способ сделать это. Я размещаю веб-API C # на IIS 8 с кодом PowerShell, который я хочу запускать с правами администратора.

Итак, я предоставил учетные данные администратора в настройке идентификатора пула приложений.

IIS8 on Windows 2012 server

Просто установите учетную запись администратора в удостоверение пула приложений.

Надеюсь, это кому-нибудь поможет. :)

0 голосов
/ 11 июля 2012

Я думаю, что альтернативной моделью было бы заключить исполнителя PowerShell в простой веб-сервис asp.net webapi.

Затем веб-сервис можно настроить для работы с необходимыми разрешениями, необходимыми для выполнения своей работы. Он может обеспечить собственную безопасность, чтобы определить, какие клиенты могут вызывать его.

Чтобы выполнить скрипт, вам нужно просто вызвать методы веб-сервиса. Вы можете сделать метод довольно общим - имя скрипта и параметры.

Это немного больше работы, но намного безопаснее (см. Мысли x0n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...