当前位置:  开发笔记 > 程序员 > 正文

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

如何解决《运行时自动从PowerShell作业中提取数据》经验,为你挑选了1个好方法。

虽然试图做一些可能超出PowerShell手段的事情,但我似乎碰到了一堵砖墙.我有一个主窗体脚本,它编排了我的大部分功能,但我需要另一个脚本来打开一个监听器(system.Net.Sockets.Udpclient.Receive)并在整个程序运行过程中继续向主窗体中的文本框输入信息.对于我的生活,我无法摆脱工作所遭受的这种愚蠢的非儿童环境; 没有点源,没有全局范围的变量,没有.我可以将一个对象监听器放在它上面,以便statechanged完成,然后打开另一个监听器并尝试以这种方式阻止,但它会变得非常混乱和不可靠.

作为一种解决方法,我希望有一个TCP/UDP监听器,它不会挂起响应的应用程序,拉动hasmoredata的事件或者在作业中更新主脚本中的文本框的方法.



1> Rynant..:

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

这是一个例子:

 $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
#>

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

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有