代码之家  ›  专栏  ›  技术社区  ›  Soleil

是否需要等待从powershell中获取内容来“中断”等待循环?

  •  2
  • Soleil  · 技术社区  · 6 年前

    是否需要等待从powershell中获取内容来“中断”等待循环?

    Get-Content "$PSScriptRoot\out.txt" -Wait
    

    out.txt 有固定数量的行正在写入,我想在到达结束时停止循环。 到目前为止,我需要用“ctrl+c”发送一个信号来完成。 在伪代码中

    Get-Content "$PSScriptRoot\out.txt" -WaitUntil 9
    Get-Content "$PSScriptRoot\out.txt" -WaitUntilMatch "^LastOutput"
    

    所以什么时候 9 行是输出,我们中断循环。或者当达到某个正则表达式匹配时,我们可以中断循环吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Moshe perez    6 年前

    您可以将值从获取内容传递到FURACH对象,并在满足条件时中断。

    例如,如果您希望在达到某个正则表达式匹配时中断,则可以使用以下内容:

    Get-Content -Path "$PSScriptRoot\out.txt" -Wait | ForEach-Object {$_ ; if($_ -Match "some regex"){break} }
    

    如果你想在N行之后中断,那么布鲁斯回答,你可以使用 Select-Object -Frist n .

    请注意,如果文件已经包含满足条件的内容,并且您只需要添加到文件中的新数据,则还应使用 -tail 期权。

    例如,如果文件已经包含9行,并且您只需要将添加到文件中的前9行 之后 运行命令,然后使用:

    Get-Content -Path "$PSScriptRoot\out.txt" -Wait -tail 1 | select -skip 1 -first 9
    

    -tail 1 ,该命令将只输出文件的最后一行以及以后将添加到文件中的新数据。 -skip 1 用于筛选出最后一行并仅输出新数据。

        2
  •  2
  •   Bruce Payette    6 年前

    你可以使用 Select-Object -First n 若要在n项之后停止管道,请执行以下操作:

    Get-Content -Path "$PSScriptRoot\out.txt" -Wait  | select -first 9
    

    (尽管我喜欢添加 -WaitUntil -WaitMatch Get-Content . 可能值得在 PowerShell Github repo )