如何停止异步PowerShell脚本块?

时间:2017-06-08 14:39:57

标签: powershell powershell-v2.0 runspace

我试图让Powershell脚本启动一个循环异步脚本块,然后做一些"其他的东西"。当"其他东西"在某些未知的时间完成,我想停止/杀死脚本块。

我在stopasych()方法上看到MS dev network info,但无法弄清楚如何在Powershell中应用它。

一个简单的例子:

$runspace = [runspacefactory]::CreateRunspace()
$ps = [powershell]::create()
$ps.runspace = $runspace

[void]$ps.addscript({
   $beep = "`a"
   for ($i = 1; $i -lt 5000; $i++) {
      $beep
      Start-Sleep -Seconds 10
   }
})
$runspace.open()
$asyncObject = $ps.beginInvoke()

Copy-Item "c:\bigdata" "\\server\share"

这让我开始了,但是当复制完成后,我想杀掉哔哔声。我无法撤消这些(即在背景中执行"复制"因为最终会有一段延迟,直到再次检查条件$ps.InvocationStateInfo.state

有人可以帮忙吗?顺便说一下,我想坚持使用PoSh v2。

1 个答案:

答案 0 :(得分:1)

就像Invoke()有一个异步的Begin / End对,Stop()也一样。

您可以像这样包装它们以停止调用:

$ps.EndStop($ps.BeginStop($null,$asyncObject))