powershell - 如何停止异步 PowerShell 脚本 block ?

标签 powershell powershell-2.0 runspace

我正在尝试让 Powershell 脚本启动一个循环异步脚本块,然后执行一些“其他操作”。当“其他东西”在某个未知的时间完成时,我想停止/终止脚本块。

我看到了 MS dev network infostopasych()方法,但无法弄清楚如何在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。

最佳答案

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

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

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

关于powershell - 如何停止异步 PowerShell 脚本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438756/

相关文章:

azure - AzCopy(devops 管道)未被识别为 cmdlet、函数、脚本文件或可操作程序的名称

powershell - 使用动态构造的排除模式数组,使用 Get-ChildItem -Exclude 过滤子文件夹

powershell - 在带有运行空间的循环中使用变量内部的脚本 block 扩展变量

c# - C# 应用程序调用的 Powershell 脚本

powershell - PowerShell正则表达式删除从Windows补丁程序提取到C驱动器根目录的文件夹

c# - 如何托管Powershell脚本或应用程序,以便可通过WSManConnectionInfo访问它? (例如Office 365)

mysql - 从 powershell 将防火墙规则添加到 Azure Database for MySQL 服务器

java - 如何更改 JVM 的语言环境?

powershell - BizTalk Configuration.exe 远程执行错误

powershell - 在 PowerShell 中使用分隔符连接部件的最佳方法