2017-06-08 87 views
4

我想要一个Powershell脚本启动一个循环异步脚本块,然后做一些“其他的东西”。当其他东西在某些未知的时间完成时,我想停止/终止脚本块。如何停止异步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。

+2

'$ ps.dispose()'? – BenH

+1

@ BenH Doh!男孩,我感到愚蠢。我知道在完成时使用'.dispose()',但我没有意识到它会阻止这个过程。谢谢。 – Teknowledgist

回答

1

就像Invoke()有一个异步开始/结束对,Stop()也是如此。

你可以用他们喜欢这个停止调用:

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