PowerShell的Stop-Job / StopJob()需要2分钟才能停止工作

时间:2015-12-18 21:27:52

标签: c# powershell

我使用C#编写了一个库,并在PowerShell脚本中使用它。 C#库将大量数据加载到数据库中。我正在使用Start-Job启动进程,我正在监视文件是否存在错误。

但是,我发现即使是C#中的简单while循环也无法停止(需要两分钟)。

我的C#:

namespace SampleJobDLL
{
    public class ClassX
    {
        public void MethodY()
        {
            while (true)
            {
                Console.WriteLine("hello");
            }
        }
    }
}

的PowerShell:

$scriptBlock = {

    Add-Type -Path ".\SampleJobDLL.dll"

    $classX = New-Object SampleJobDLL.ClassX

    $classX.MethodY();
}

$job = Start-Job -ScriptBlock $scriptBlock

然后运行以下脚本:

$before = [DateTime]::Now; 
$job.StopJob(); 
$after = [DateTime]::Now; 
$after.Subtract($before);

给我:

Days              : 0
Hours             : 0
Minutes           : 2
Seconds           : 0
Milliseconds      : 4

是否有使用Start-Job(或等效命令)运行代码但能够立即停止的方法?

1 个答案:

答案 0 :(得分:0)

我相信dfundako和user2460798是正确的:最简单的方法是生成一个新流程并将其删除,而不是搞乱PowerShell Jobs。

将脚本块内容放在新文件中;称之为(例如)MyScript.ps1

此后,我们使用Start-Process启动脚本,并在变量中捕获过程对象:

$process = Start-Process powershell.exe '.\MyScript.ps1' -PassThru

使用

杀死它
$process.Kill();

Stop-Process -Id $process.Id -Force

我已经研究过使用[PowerShell]::Create()创建PowerShell实例,但是在运行其他代码时无法对实例调用命令。

还研究了生成一个新线程,它不起作用(即使我将-Mta作为命令行arg传递给powershell.exe)。

相关问题