Я бы использовал пространство имен System.Management.Automation и создал бы консольный объект PowerShell. Вы можете передать ему команды или файлы .ps1 - оба с аргументами - для выполнения. Гораздо чище, чем отдельная оболочка, которая затем должна вызывать powershell.exe.
Другие вещи, которые необходимо обеспечить, - это идентификация пула приложений. Убедитесь, что он обладает уровнем прав, необходимым для выполнения команд и / или сценариев PowerShell. Затем убедитесь, что вы правильно настроили Set-ExecutionPolicy, если собираетесь выполнять файлы сценариев.
Вот код, выполняющий команды, представленные веб-формой TextBox, как если бы это была консоль PowerShell, использующая эти объекты - должен иллюстрировать подход:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Management.Automation;
using System.Text;
namespace PowerShellExecution
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ExecuteCode_Click(object sender, EventArgs e)
{
// Clean the Result TextBox
ResultBox.Text = string.Empty;
// Initialize PowerShell engine
var shell = PowerShell.Create();
// Add the script to the PowerShell object
shell.Commands.AddScript(Input.Text);
// Execute the script
var results = shell.Invoke();
// display results, with BaseObject converted to string
// Note : use |out-string for console-like output
if (results.Count > 0)
{
// We use a string builder ton create our result text
var builder = new StringBuilder();
foreach (var psObject in results)
{
// Convert the Base Object to a string and append it to the string builder.
// Add \r\n for line breaks
builder.Append(psObject.BaseObject.ToString() + "\r\n");
}
// Encode the string in HTML (prevent security issue with 'dangerous' caracters like < >
ResultBox.Text = Server.HtmlEncode(builder.ToString());
}
}
}
}
Чтобы сделать это при загрузке страницы, вам нужно создать функцию, которая соответствует вашим потребностям, и вызвать ее из функции «Page_Load».
Вот описание, которое описывает, как создать страницу от начала до конца с помощью Visual Studio и как это сделать, http://grokgarble.com/blog/?p=142.
Пожалуйста, проголосуйте и отметьте соответственно, если полезно.
Спасибо,
Джефф