由于处理时间过长,调用其他命令的PSCmdlet会冻结吗?

时间:2013-06-19 13:33:24

标签: c# .net powershell cmdlet pscmdlet

我有一个用C#和.NET 3.5编写的PSCmdlet,它调用了在同一Cmdlet内定义的一些其他命令。

其中一个命令启动了我的SharePoint网站上的完全爬网,并等待它完成。乐观地说,这些需要5-10分钟才能完成。

由于此命令需要很长时间且PowerShell类同步运行它们,因此控制台将在此期间冻结。

没关系,但几分钟后,Windows会认为它已经崩溃并炸毁了PowerShell控制台。我该如何防止这种情况发生?

以下是我正在运行命令的方法:

PowerShell ps = PowerShell.Create();
ps.Commands.AddCommand("Start-CrawlAndRunSearchCatalog").AddParameter("configFilePath", this.configFilePath);

foreach (string str in ps.AddCommand("Out-String").Invoke<string>())
            this.WriteObject(str);

1 个答案:

答案 0 :(得分:0)

也许这个?

var thread = new Thread(() =>
{
    PowerShell ps = PowerShell.Create();
    ps.Commands.AddCommand("Start-CrawlAndRunSearchCatalog").AddParameter("configFilePath", this.configFilePath);

    foreach (string str in ps.AddCommand("Out-String").Invoke<string>())
        this.WriteObject(str);
});

thread.Start();
thread.Join();