【问题标题】:Multiple Arrays Output Results in Blank Lines多个数组输出结果为空行
【发布时间】:2015-11-16 18:02:28
【问题描述】:

我正在尝试将多个数组 (3) 的结果输出到同一输出(控制台)。代码大致是这样的:

$array1
foreach ($item in $array1)
{
  $array2 = get list of services for $item
  $array2 = get list of schedtasks for $item
  if ($array2)
  {
    write-host "array2 data"
    $array2
  }
  if ($array3)
  {
    write-host "array3 data"
    $array3
  }
}

我遇到的问题是,一旦第一个数组输出,控制台似乎将自己附加到该数组的列标题,并且仅在其他数组的列标题与第一个数组的列标题匹配时才显示其他数组的数据.它仍然为与标题不匹配的每一行输出一个空行,表示填充了其他数组。

我通过预先创建和输出一个自定义数组来验证这一点,该数组具有与所有其他数组组合的所有相同的列标题。现在我得到了所有数据,但在 4 列中与原始自定义数组对齐。

我正在使用 Powershell ISE,它在带有 Powershell 2 的 Server 2008 R2 和带有 Powershell 4 的 Server 2012 R2 中都执行此操作,这让我相信这是预期的行为,但我不明白。

任何想法发生了什么以及如何使数组数据输出独立于前一个数组的输出进行处理?提前致谢。

【问题讨论】:

  • 你的代码说的不够,你删除了太多的逻辑。您能否编辑您的帖子以显示输入数组的外观以及您期望在我们的屏幕上显示的结果?
  • 管道到主机外似乎可以解决问题。谢谢 PetSerAl!如果您想将其添加为答案,我会将其标记为已回答。 sodawillow, array1 包含计算机名称列表,单列。 array2 是计划任务和帐户运行方式的列表,array3 是服务名称和帐户运行方式的列表。我只是使用各种命令填充数组以获取此类信息:get-adcomputer、gwmi 和 schtasks.exe。看起来很简单,因为差不多就是这样。希望对您有所帮助。
  • $array1 | Out-Host ? :-p 但在我看来,您的循环完全针对$array1 的每个值回显$array2$array3,我不明白它们的用法:)
  • 我现在明白了。不,你是对的。为了清楚起见,我更新了代码部分。 :)

标签: arrays powershell console output


【解决方案1】:

众所周知的 PowerShell 问题,它在格式化具有不同属性集的对象时不是很好:

$a = [PSCustomObject]@{a=1; b=2}
$b = [PSCustomObject]@{b=2; c=3}
$a, $b # table with properties a and b  not c
$b, $a # table with properties b and c  not a

要彼此独立地格式化数组,您可以将每个数组传递给Out-Host cmdlet 的单独调用,而不是将数组写入输出:

$array2 | Out-Host
$array3 | Out-Host

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 2018-05-02
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多