首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Select-Object -Property参数防止在循环中获取对象

Select-Object -Property参数防止在循环中获取对象
EN

Stack Overflow用户
提问于 2019-08-25 06:52:37
回答 2查看 48关注 0票数 0

请帮助我理解为什么我在循环时不能使用-Property参数输出Select-Object对象。

下面是一个例子:

代码语言:javascript
复制
$GPjob = Start-Job -ScriptBlock {Get-Process | Select-Object -First 1}

for ($i = 0 ; $i -lt 200000 ; $i++) {
    if (($GPjob.State -eq 'Completed') -and ($GPjob.HasMoreData)) {
        "Step 1: $(Get-Date) : `$i=$i"
        Receive-Job $GPjob | Select-Object -Property Name
        "Step 2: $(Get-Date) : `$i=$i"
    }
}

步骤1、Receive-Job和步骤2行应该在一个$i周期内逐一执行。所以我应该一次看到所有三个输出。但实际上,在整个循环结束之前,我看不到Receive-Job和Step 2的输出。

但是,如果我不对Receive-Job使用-Property参数,一切都会按预期进行:我会同时看到所有三个输出。

EN

回答 2

Stack Overflow用户

发布于 2019-08-25 07:41:01

这种方式出来得更快,但我不能解释为什么。也许这就是Out-Default的工作原理。我用&{ for () }和foreach-object得到了相同的结果。在ise调试器中,如果我在接收作业行上放置了一个断点,那么输出会在我跳过“步骤2”行之后立即输出。

代码语言:javascript
复制
Receive-Job $GPjob | Select-Object -ExpandProperty Name
票数 0
EN

Stack Overflow用户

发布于 2019-08-26 01:12:23

我仍然没有找到答案,但我找到了一个变通办法。Format-Table修复了这个迷宫。因此,下一段代码就像预期的那样工作:

代码语言:javascript
复制
$GPjob = Start-Job -ScriptBlock {Get-Process | Select-Object -First 1}

for ($i = 0 ; $i -lt 200000 ; $i++) {
    if (($GPjob.State -eq 'Completed') -and ($GPjob.HasMoreData)) {
        "Step 1: $(Get-Date) : `$i=$i"
        Receive-Job $GPjob | Select-Object -Property Name | ft
        "Step 2: $(Get-Date) : `$i=$i"
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57642058

复制
相关文章

相似问题

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