首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动-作业-ScriptBlock:检索在ScriptBlock中编译的数组

启动-作业-ScriptBlock:检索在ScriptBlock中编译的数组
EN

Stack Overflow用户
提问于 2014-12-10 22:27:35
回答 1查看 793关注 0票数 0

我在构建数组的ScriptBlock中有一个Foreach循环。当数组完成后,我想不出如何从作业中检索数组。

这是我目前的密码。

代码语言:javascript
复制
$HSMissingEmail = New-Object System.Collections.ArrayList
$HSDataObjects = New-Object System.Collections.ArrayList

$HSMissingEmail = Start-Job -Name HSMissingEmailStatus -ScriptBlock {
    param($HSDataObjects, $HSMissingEmail);
    foreach ($HSDO in $HSDataObjects) {
      $HSDO = $HSDO | Select-Object Name, Location, Telephone, EmailAddress, Comments;
      if ($HSDO | Where-Object {$_.EmailAddress -like ""}) {
        $HSMissingEmail.Add($HSDO)
      }
    }
  } -HSDataObjects $HSDataObjects -HSMissingEmail $HSMissingEmail | Receive-Job -Name HSMissingEmailStatus

我也尝试过以下方法,但是它也没有做任何事情。

代码语言:javascript
复制
$HSMissingEmail = New-Object System.Collections.ArrayList
$HSDataObjects = New-Object System.Collections.ArrayList

$ScriptBlock = 
    {
        param($HSDataObjects,$HSMissingEmail)
        foreach ($HSDO in $HSDataObjects)
        {
            $HSDO = $HSDO | Select-Object Name, Location, Telephone, EmailAddress, Comments

            if ($HSDO | Where-Object {$_.emailaddress -like ""})
                {
                    $HSMissingEmail.Add($HSDO)
                }
        }
    }
    Start-Job -Name HSMissingEmailStatus -ScriptBlock $ScriptBlock -HSDataObjects $HSDataObjects -HSMissingEmail $HSMissingEmail
    ProgressBar ([REF]$HSMissingEmailStatus)
    $HSMissingEmail = Receive-Job -Name HSMissingEmailStatus
    Get-job -Name HSMissingEmailStatus | Remove-Job

我尝试过许多不同的方法来形成ScriptBlock,但是没有人会将任何东西返回给$HSMissingEmail。

另外,第二个代码块在使ScriptBlock全部一行之前不会获得传递的数据,我不确定这是否是默认行为。

如何检索数组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 01:06:12

您需要将数组写入标准输出。

代码语言:javascript
复制
$HSMissingEmail = New-Object System.Collections.ArrayList
$HSDataObjects = New-Object System.Collections.ArrayList

$HSMissingEmail = Start-Job -Name HSMissingEmailStatus -ScriptBlock {
    param($HSDataObjects, $HSMissingEmail);
    foreach ($HSDO in $HSDataObjects) {
      $HSDO = $HSDO | Select-Object Name, Location, Telephone, EmailAddress, Comments;
      if ($HSDO | Where-Object {$_.EmailAddress -like ""}) {
        $HSMissingEmail.Add($HSDO)
      }
    }
    $HSMissingEmail    # Drops it out as a result of the script block
  } -HSDataObjects $HSDataObjects -HSMissingEmail $HSMissingEmail
Receive-Job -Name HSMissingEmailStatus -Wait  # At the appropriate time, or keep cycling until you get it all

至于单行/多行位,如果没有显式地将变量键入为ScriptBlock,可能会出现问题,但我必须检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27412059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档