powershell - 运行时自动从 PowerShell 作业中提取数据

标签 powershell udp jobs

在尝试做一些很可能超出 PowerShell 手段的事情时,我似乎遇到了砖墙。我有一个主表单脚本,它编排了我的大部分功能,但我需要另一个脚本来打开一个监听器(system.Net.Sockets.Udpclient.Receive)并在整个程序运行过程中不断向主表单中的文本框提供信息.
对于我的生活,我无法摆脱工作所遭受的这种愚蠢的非 child 环境;没有点源,没有全局范围的变量,什么都没有。我可以在其上放置一个对象监听器以完成 statechanged,然后打开另一个监听器并尝试以这种方式进行 bodge,但它会变得非常困惑和不可靠。

作为一种解决方法,我希望使用 TCP/UDP 监听器,它不会挂起应用程序以获取响应、拉取 hasmoredata 的事件或从作业中更新主脚本中的文本框的方法。

最佳答案

您可以通过引发事件并将其转发回本地 session 来从作业返回数据。

下面是一个例子:

 $job = Start-Job -Name "ReturnMessage" -ScriptBlock {
     # forward events named "MyNewMessage" back to job owner
     # this even works across machines
     Register-EngineEvent -SourceIdentifier MyNewMessage -Forward

     while($true) {
         sleep 2
         $i++
         $message = "This is message $i."
         # raise a new progress event, assigning to $null to prevent
         # it ending up in the job's output stream
         $null = New-Event -SourceIdentifier MyNewMessage -MessageData $message
     }
 }

$event = Register-EngineEvent -SourceIdentifier MyNewMessage -Action {
    Write-Host $event.MessageData -ForegroundColor Green
}

<# Run this to stop job and event listner
$job,$event| Stop-Job -PassThru| Remove-Job
#>

请注意,您仍然可以在作业运行时在提示符下键入。执行块注释中的代码以停止作业和事件监听器。

关于powershell - 运行时自动从 PowerShell 作业中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415603/

相关文章:

powershell - 无法将 DateTime 传递给类方法 - 强制错误

node.js - 如何使用 Kue 每周四安排一次工作?

grails - 删除后 quartz 作业仍然存在吗?

用于工作站客户端的 c# 热图像服务器流

当 svn checkout 失败时 Jenkins 作业会自行禁用

powershell - 在Powershell中递归重命名文件

powershell - 如何使用列表文件重命名文件?

c# - 通过 PowerShell 调用 user32.dll "SetWindowCompositionAttribute"

sockets - 我可以接收多播数据包,但不能接收单播数据包

java - UDP 地址已被使用?