Я запускаю ASP
веб-приложение, которое должно запустить Powershell script
на сервере. Для запуска Powershell script
необходимо много прав Домена. Поэтому я запускаю apppool под пользователем, у которого есть все права.
Но когда я запускаю сценарий powershellscript, я всегда получаю сообщение о том, что доступ запрещен.
Кто-нибудь знает, как решить проблему?
Когда я запускаю процесс, как описано, выполняется ли этот процесс под usercontext пула приложений или под usercontext пользователя, который вошел в веб-приложение ASP.NET?
Я пробовал два метода
1.
string cmdArg = "C:\\Scripts\\test.ps1 " + username;
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
string test = Environment.UserName;
}
return results[0].ToString();
2
string cmdArg = "C:\\Scripts\\test.ps1 " + username;
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("powershell.exe",cmdArg);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
myProcess.WaitForExit();
string myString = myStreamReader.ReadLine();
return myString;
Хорошо, вы думаете, что запускать Apppool с этими большими правами не лучшая практика.
Как насчет размещения веб-службы между? Веб-сервис находится в домене приложения, доступном только с localhost?
Обновление
Хорошо, я написал веб-сервис asp.net. Веб-сервис работает в пуле приложений со всеми правами, но доступен только с localhost. Веб-сервис содержит код для запуска скрипта. Веб-приложение ASP MVC3 работает в пуле приложений практически без прав.
Но когда выполняется веб-метод, я всегда получаю ошибку, которая говорит мне, что у меня нет прав. Я пытался установить в роли webconfig «заменитель» false, но безуспешно.
Кто-нибудь знает, как решить эту проблему?
Обновление:
Я прочитал текущего пользователя, который запускает PowerShell, когда я запускаю его из веб-службы. Я говорю, что у пользователя есть все права. Но ps выдает ошибки типа: вы не можете запустить метод со значением null.
Тогда я попытался запустить ps с runas как пользователь низкого уровня. Я получаю те же ошибки.
Тогда я попытался запустить ps с тем же пользователем, что и в веб-сервисе, и все заработало!
Есть ли кто-нибудь, кто мог бы объяснить это явление?
А чем отличается мой код выше от рун? (тот же пользовательский контекст)
спасибо большое!