脚本中执行顺序的PowerShell问题[重复]

wgeznvg7  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(170)

这个问题在这里已经有答案

PowerShell output is crossing between functions(1个应答)
How do I prevent Powershell from closing after completion of a script?(2个答案)
weird delay of the output of an object when followed by start-sleep (or until script end)(3个答案)
12天前关门了。
在下面的PowerShell脚本中,我遇到了意外的运行和返回顺序问题。
WRITE-ArrayToTable函数用于通过定制对象以类似于表的方式输出数组中的数据。
问题是,当我调用WRITE-ArrayToTable函数时,它直到Read-主机命令返回之后才返回数据。
下面是运行脚本的输出,代码本身在下面。表输出应该在Read-Host调用之前显示,但是会一直保持到调用结束,然后才显示。
我遗漏了什么?如有任何帮助,不胜感激!
产出:

Test: y
Label1 Label2
------ ------
Test1  Test3
Test2  Test4
y

代码:

Function Write-ArrayToTable{
  param(
      [String[]]$Names,
      [Object[][]]$Data
  )
  for($i = 0;; ++$i){
    $Props = [ordered]@{}
    for($j = 0; $j -lt $Data.Length; ++$j){
      if($i -lt $Data[$j].Length){
        $Props.Add($Names[$j], $Data[$j][$i])
      }
    }
    if(!$Props.get_Count()){
      break
    }
    [PSCustomObject]$Props
  }
}

$arr1 = @("Test1","Test2")
$arr2 = @("Test3","Test4")

Write-ArrayToTable "Label1","Label2" $arr1,$arr2

Read-Host "Test"
carvr3hs

carvr3hs1#

而不是像这样丢弃你的物体:

[PSCustomObject]$Props

你可以更明确地说:

$Props | Out-String

如果要在一个表中打印所有对象,请在打印之前先收集它们:

Function Write-ArrayToTable{
  param(
      [String[]]$Names,
      [Object[][]]$Data
  )
  $myProps = for($i = 0;; ++$i){
    $Props = [ordered]@{}
    for($j = 0; $j -lt $Data.Length; ++$j){
      if($i -lt $Data[$j].Length){
        $Props.Add($Names[$j], $Data[$j][$i])
      }
    }
    if(!$Props.get_Count()){
      break
    }
    [PSCustomObject]$Props
  }
  $myProps | Format-Table
}

相关问题