Процесс ASP.NET запускает сценарий PowerShell IIS 7.5 - PullRequest
3 голосов
/ 22 октября 2011

Все отлично работает на моем компьютере разработчика, но при развертывании в IIS процесс не запускается.Я запускаю сценарий powershell:

    private void RunScript()
    {
        Process process = null;
        try
        {
            int timeout = 1800000;
            var startInfo = new ProcessStartInfo
            {
                FileName = @"powershell.exe",    
                Arguments = string.Format("{0} {1}", "\path\toscript", "myParam"),
                UseShellExecute = false,
                CreateNoWindow = true
            };                   

            process = Process.Start(startInfo);
            process.WaitForExit(timeout);
        }
        finally
        {
            if (!process.HasExited)
            {
                if (process.Responding)
                    process.CloseMainWindow();
                else
                    process.Kill();
            }
            if (process != null)
            {
                process.Close();
                process.Dispose();
            }
        }  
    }

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

Модель процесса-> Identity = пользователь домена, который является администратором домена.-> Загрузить профиль пользователя = True

Веб-приложениеАутентификация - Windows

Что еще мне нужно настроить, чтобы я мог запустить Процесс?

Ответы [ 3 ]

3 голосов
/ 25 октября 2011

Как и предполагал Start-Automating, в конечном итоге я сделал следующее:

            using (Runspace runSpace = RunspaceFactory.CreateRunspace())
        {
            try
            {
                runSpace.Open();
                RunspaceInvoke scriptInvoker = new RunspaceInvoke(runSpace);
                scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
                using (Pipeline pipeLine = runSpace.CreatePipeline())
                {                        
                    var myCommand = new Command(scriptPath);                           
                    var myParam1 = new CommandParameter("-paramName", "someValue"); 
                    myCommand.Parameters.Add(myParam1);
                    pipeLine.Commands.Add(myCommand);       
                    pipeLine.Commands.Add("Out-String");
                    Collection<PSObject> returnObjects = pipeLine.Invoke();
                    runSpace.Close();

                    return returnObjects;                                              
                }
            }
            finally 
            {
                runSpace.Close();
            }
        }

На сервере IIS я выполнил следующую команду powershell "Set-ExecutionPolicy RemoteSigned"

1 голос
/ 22 октября 2011

Гораздо лучше встраивать API-интерфейсы PowerShell, вызывая .exe

Вот старая ссылка, которая предоставит вам пространство выполнения PowerShell, встроенное в ASP.NET для пользователя:

http://powershellpipeworks.com/

0 голосов
/ 22 октября 2011

Проверьте права доступа к файловой системе, в которой находится powershell.exe.

Кроме того, проверьте Security Log в Event Viewer на наличие ошибок аутентификации и нарушений доступа.

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