2017-06-08 123 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))