Вы не предоставили много информации, но от вас говорят о Page_Load и Page_Init Я предполагаю, что вы пытаетесь сделать это из веб-приложения ASP.NET. Нажатием кнопок и установкой состояния в Runspace.
Если это WinForms приложение, которое вы можете просто создать пространство выполнения:
Runspace runspace = RunspaceFactory.CreateRunspace(Host);
А затем создавать экземпляры Powershell и просто повторно использовать это пространство выполнение:
var ps1 = PowerShell.Create();
ps1.Runspace = runspace;
ps1.AddScript("Write-Host 'hello'")
var ps2 = PowerShell.Create();
ps2.Runspace = runspace;
ps2.AddScript("Write-Host 'world'")
Вы можете сохранить пространство выполнения вокруг и просто запускать скрипты между нажатиями кнопок на той же самой рабочей области.
Если вы находитесь в asp.net, это отличается, очевидно, каждый раз, когда вы нажимаете кнопку, создается новый поток, и вы не сможете сохранить пробел в переменной, поэтому вам нужно будет сделать что-то вроде держать его вокруг в сессии следующим образом:
protected PSHost Host
{
get
{
if (this.Session["Host"] == null)
{
var host = new MyHost();
this.Session["Host"] = host;
}
return (PSHost)this.Session["Host"];
}
}
protected Runspace Runspace
{
get
{
if (this.Session["Runspace"] == null)
{
var rs = RunspaceFactory.CreateRunspace(Host);
this.Session["Runspace"] = rs;
rs.Open();
}
return (Runspace)this.Session["Runspace"];
}
}
а потом я проверил, что это работает:
protected void Page_Load(object sender, EventArgs e)
{
Button1.Click += new EventHandler(Button1_Click);
Button2.Click += new EventHandler(Button2_Click);
Button3.Click += new EventHandler(Button3_Click);
}
void Button3_Click(object sender, EventArgs e)
{
var ps = PowerShell.Create();
ps.Runspace = this.Runspace;
ps.AddScript("$test | ft | out-string");
var input = new List<object>();
var output = new List<object>();
ps.Invoke(input, output);
TextBox1.Text = output.First().ToString();
}
void Button2_Click(object sender, EventArgs e)
{
var ps = PowerShell.Create();
ps.Runspace = this.Runspace;
ps.AddScript("$test = 'world'");
ps.Invoke();
}
void Button1_Click(object sender, EventArgs e)
{
var ps = PowerShell.Create();
ps.Runspace = this.Runspace;
ps.AddScript("$test = 'hello'");
ps.Invoke();
}
при нажатии на кнопку 1, а затем 3 отображает «Hello» и
Когда я нажимаю кнопку 2, а затем 3 отображает «Мир»
Так что он с готовностью повторно использовал пробел.