2009-08-21 3 views
7

У меня есть следующий код на С #Выполнить PowerShell как администратор C#

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

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

доступ к ключу реестра «HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell ' отрицается.

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

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

ответ

8

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

Вы должны олицетворять как администратор, чтобы сделать это (вы, конечно, необходимо иметь учетные данные администратора)

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

в принципе, вам нужно сделать, это:

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

Это не работает для меня в Windows Server 2012 и PowerShell 3.0. :( – Anonymous

+3

Я удивлен, что OP отметил это как ответ. В этом вопросе он заявляет: «Щелкнув правой кнопкой мыши PowerShell и выбрав« Запуск от имени администратора », что означает, что учетные данные, которые они запускают, уже входят в группу администраторов но они прекращаются замечательной безопасностью (кашель, кашель), которую добавила MS, называемая UAC. Решение, отправленное (и проверенное как), не затрагивает этого. Часть меня говорит, чтобы отметить это сообщение, потому что ответ не решает проблему * posted * question ... – Jason

+0

Это очень старый код из проекта кода. 2005. Он не будет работать в Windows 2012. Мне нужно будет найти способ конвертировать его в 64 бит. –

2

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

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

-Oisin

+1

Это не так, t нужно ho в исходный код, мой фрагмент - всего лишь пример – juan

0

Я думаю, что альтернативная модель будет обернуть Powershell исполнителем в простой asp.net WebAPI WebService.

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

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

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

3

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

Мы должны были рамки политики выполнения на машине, выполняющей код C#, выполнив следующие действия с PowerShell ...

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted 

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

-2

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

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

IIS8 on Windows 2012 server

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

Надеюсь, это поможет любому. :)

+0

Всегда избегайте этого, потому что это серьезный недостаток безопасности – devi

+0

его намного лучше, чем учетные данные жестко закодированы ... :) @devi - подумайте об этом один раз –

+0

не согласен, работает iis пул, так как местный администратор - очень плохая идея, ничто другое не может быть более плохим, даже жестким. В общем случае требование запуска чего-то локального администратора в веб-приложении является сигналом к ​​плохому дизайну. – devi

Смежные вопросы