在 C# 中创建持久性 Powershell 会话
本文关键字:Powershell 会话 持久性 创建 | 更新日期: 2023-09-27 18:31:20
我有一个项目调用了一堆Powershell脚本,其中一些脚本需要几分钟才能运行并导致页面超时。我考虑过使用 Start-Job 在后台运行多个进程,以释放页面免于超时,但每次我运行 Powershell 命令时,它都会打开一个新的 Powershell 实例,并且找不到任何作业。
protected void RunShell()
{
var Shell = PowerShell.Create();
Shell.Commands.AddScript(Textbox.Text);
var results = Shell.Invoke();
if (results.Count > 0)
{
var builder = new StringBuilder();
foreach (var psObject in results)
{
builder.AppendLine(psObject.BaseObject.ToString();
}
Textbox2.Text = builder.ToString();
}
}
protected void button1_Click(object sender, EventAgrs e)
{
Textbox1.Text = "Start-Job -ScriptBlock{.''script.ps1} | Out-String";
RunShell();
}
protected void button2_Click(object sender, EventArgs e)
{
Textbox1.Text = "Get-Job * | Out-String";
RunShell();
}
我现在希望创建一个持久的 powershell 会话,我能够向其发送命令并从中检索作业和状态。我不知道如何将这段代码设置为全局变量。
任何指向正确方向的指示将不胜感激。
你试过这个吗?
PowerShell.Create(CurrentRunspace)
http://msdn.microsoft.com/en-us/library/system.management.automation.runspacemode%28v=vs.85%29.aspx
编辑:如果要共享PowerShell,可以执行此操作(要在整个应用程序中共享它,请将Session
替换为Application
):
private PowerShell GetPowerShell()
{
PowerShell Shell = Session["PowerShell"] as PowerShell;
if (Shell == null)
{
Shell = PowerShell.Create();
Session["PowerShell"] = Shell;
}
return Shell;
}