Я новичок в объединении C # и Powershell, но надеюсь создать веб-страницу, которая использует Powershell в бэк-энде. Я понимаю, что то, что я делаю, может быть сделано исключительно с C #, но хотел бы выяснить это для других приложений.
По сути, я беру имя нового веб-приложения из веб-формы и получаю имя пользователя, прошедшего проверку подлинности, для сопоставления физических путей.
Мой код Powershell работает правильно (даже при прямом копировании из Pipeline.Commands [0]), но, похоже, он ничего не делает при запуске. Я получаю ошибки параметров в результирующей переменной, если форсирую один (например, сделать -physicalpath несуществующим путем), но при всех правильных параметрах, результат переменной содержит только один пустой элемент.
Я вижу много похожих на этот вопрос вопросов, но не вижу окончательного ответа.
Похоже ли это на проблему с модулем C # или IIS Powershell? Любые идеи, как я могу получить больше информации от моей команды?
protected void Button1_Click(object sender, System.EventArgs e)
{
String username = getUser();
String physicalPath = "S:\\WebSites\\" + username + "\\public_html\\" + TextBox1.Text;
// Create Powershell Runspace
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
// Create pipeline and add commands
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(
"Import-Module WebAdministration; set-psdebug -trace 1; " +
"New-WebApplication -Site MySite" +
" -Name " + TextBox1.Text +
" -PhysicalPath " + physicalPath +
" -ApplicationPool WebSites -Verbose -force");
pipeline.Commands.Add("Out-String");
// Execute Script
Collection<PSObject> results = new Collection<PSObject>();
try
{
results = pipeline.Invoke();
}
catch (Exception ex)
{
results.Add(new PSObject((object)ex.Message));
}
// Close runspace
runspace.Close();
//Script results to string
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
}
}
Спасибо!