我已经使用C#编写了一个库,并在PowerShell脚本中使用了它。C#库将大量数据加载到数据库中。我正在Start-Job
启动该过程,并且正在监视文件中的错误。
但是,我发现即使是while
C#中的简单循环也无法停止(需要整整两分钟)。
我的C#:
namespace SampleJobDLL
{
public class ClassX
{
public void MethodY()
{
while (true)
{
Console.WriteLine("hello");
}
}
}
}
电源外壳:
$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
(或等效命令)运行代码但能够立即停止运行的方法?
我相信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实例,[PowerShell]::Create()
但是在实例运行其他代码时无法针对该实例调用命令。
还研究了产生一个新线程,该线程不起作用(即使我-Mta
作为命令行arg传递给powershell.exe也是如此)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句