Как настроить IIS-8 и его пул приложений для выполнения сценариев PowerShell/PowerCli внутри размещенного Asp.net MVC

У меня следующая конфигурация:

  • Windows Server 2012 R2.

  • ИИС-8.

  • Веб-приложение ASP.NET MVC-5, размещенное в IIS-8.

Теперь в моем веб-приложении asp.net MVC есть метод, который выполняет некоторые команды PowerShell и PowerCli, вот пример скриптов:

var shell = PowerShell.Create();
var shell2 = PowerShell.Create();
var shell3 = PowerShell.Create();

string PsCmd = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName +
  "';$vCenterAdmin = '" + vCenterUsername + "' ;$vCenterPassword = '" + vCenterPassword +
  "';" + System.Environment.NewLine;

PsCmd = PsCmd + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin `
  -Password $vCenterPassword;" + System.Environment.NewLine;
PsCmd = PsCmd + "Get-VMHost " + System.Environment.NewLine;

// PowerCLI script to the the hypervisor network info
string PsCmd2 = "add-pssnapin VMware.VimAutomation.Core; $vCenterServer = '" + vCenterName +
  "';$vCenterAdmin = '" + vCenterUsername + "' ;$vCenterPassword = '" + vCenterPassword +
  "';" + System.Environment.NewLine;

PsCmd2 = PsCmd2 + "$VIServer = Connect-VIServer -Server $vCenterServer -User $vCenterAdmin `
  -Password $vCenterPassword;" + System.Environment.NewLine;
PsCmd2 = PsCmd2 + " Get-VMHost " + vCenterName + "| Get-VMHostNetworkAdapter -VMKernel" +
  System.Environment.NewLine;

shell.Commands.AddScript(PsCmd);
shell2.Commands.AddScript(PsCmd2);

dynamic results = shell.Invoke(); // execute the first PowerCLI script
dynamic results2 = shell2.Invoke(); // execute the second PowerCLI script

// the PowerCLI executed successfully
if (results != null && results.Count > 0 && results[0].BaseObject != null)

проблема, с которой я сталкиваюсь, заключается в следующем:

  1. когда я развернул код asp.net MVC, который содержит описанный выше метод, на IIS-7 + Windows Server 2008 R2, все работало хорошо, и сценарии возвращали результаты.

  2. но теперь на нашем рабочем сервере у нас есть IIS-8 + Windows Server 2012 r2, и описанный выше метод не работает, сценарии powershell возвращают null...

Вот настройки, которые у меня есть на IIS-8:

  1. Я определил пользователя Domitian для DefaultAppPool и добавил этого пользователя домена в локальную группу администраторов на хост-сервере.

  2. Я также включаю анонимную аутентификацию для веб-приложения и определяю его для запуска как «Идентификатор пула приложений».

Так может ли кто-нибудь посоветовать, почему IIS-8 не позволяет размещенному веб-приложению asp.net запускать сценарии powershell?


person john Gu    schedule 13.10.2015    source источник


Ответы (2)


Пытаетесь ли вы сначала выполнить сценарии PowerShell/PowerCli в консоли PowerShell сервера WS2012r2?

Если да, то используете ли вы 32- или 64-битную консоль? Попробуйте в каждом?

Если да, то считаете ли вы, что целевая платформа вашего проекта соответствует 64 или 32 битам (той, на которой сценарии работают в консоли).

person JPBlanc    schedule 13.10.2015
comment
Да, я пробовал запускать сценарии прямо в окнах Powercli, и они работали хорошо. я использовал 64-битную версию, я также пытался настроить таргетинг на конкретный .exe следующим образом: Start-Process -FilePath C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe; но это тоже не сработало ... у меня такое ощущение, что эта проблема связана с тем, как работает IIS-8 по сравнению с IIS-7, так как на IIS-7 всегда все работало хорошо, но на производстве мы используем IIS-8 с сервером Windows 2012 R2 .. не могли бы вы посоветовать больше об этом, пожалуйста? - person john Gu; 13.10.2015
comment
Вы пытаетесь нацелить свой проект ASP MVC на 64 бита, несмотря на ЛЮБОЙ процессор. - person JPBlanc; 13.10.2015
comment
Можете ли вы узнать больше об этом, пожалуйста? как я могу это сделать? - person john Gu; 13.10.2015
comment
Попробуйте: Щелкните правой кнопкой мыши на вашем проекте MVC. Затем Свойства-›генерировать-›Target Plateform x64. - person JPBlanc; 13.10.2015
comment
хорошо, я меняю целевую платформу на x64, публикую новый пакет веб-развертывания и развертываю его под IIS-8, теперь приложение не будет возвращать никаких ошибок, но скрипты powershell все равно не работают... - person john Gu; 13.10.2015
comment
@JBBlanc, можете ли вы посоветовать что-нибудь по этому поводу? и каковы рекомендуемые настройки пула приложений в моем случае? - person john Gu; 13.10.2015
comment
уже приложили усилия, но можете ли вы дать дальнейшие советы по этому вопросу? Спасибо.. - person john Gu; 13.10.2015
comment
Разве вы не можете перехватывать исключения в сценариях PowerShell и заходить на диск, чтобы посмотреть, что пойдет не так. - person JPBlanc; 14.10.2015
comment
наконец-то мне удалось найти причину этой проблемы. где на машине Dev (Windows server 2008 R2 + IIS7) я могу получить доступ к данным powershell, используя что-то вроде results[0].BaseObject.Build, в то время как в Live мне нужно получить к ним доступ, используя results[0].Build. хотя в обеих средах возвращаемые данные, отображаемые в окнах отладки Visual Studio Autos, абсолютно одинаковы. Я установил VS на живой сервер, чтобы понять причину! но я не уверен на 100% что происходит.. - person john Gu; 14.10.2015

Интересно, установлен ли PowerCLI на рабочем сервере. Если нет, конечно, Add-PSSnapin vmware.vimAutomation.core потерпит неудачу.

Тривиальный string PsCmd для создания пустого файла или сообщения электронной почты может помочь подтвердить вашу догадку о том, что новые IIS и PS работают не очень хорошо. (Или, по крайней мере, помогите поставить M в mcve для более аккуратного вопроса).

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

person noam    schedule 14.10.2015