我使用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
(或等效命令)运行代码但能够立即停止的方法?
答案 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)。