在ForEach内部的PowerShell中格式化表

在ForEach内部的PowerShell中格式化表,powershell,foreach,formattable,Powershell,Foreach,Formattable,不确定我在这里做错了什么,我知道这与它在ForEach循环中的事实有关。我已经尝试过移动下面的代码。即使使用一半和一半的代码(半入半出循环似乎也不起作用)。对于PowerShell来说还是个新手,我知道我需要在每次迭代时将变量转换为$table,或者将它们存储在某个位置,稍后再读取它们 foreach ($gp in $GPINFO) { # Code that gets the values for $gp, $aclBefore and $aclAfter is here

不确定我在这里做错了什么,我知道这与它在ForEach循环中的事实有关。我已经尝试过移动下面的代码。即使使用一半和一半的代码(半入半出循环似乎也不起作用)。对于PowerShell来说还是个新手,我知道我需要在每次迭代时将变量转换为$table,或者将它们存储在某个位置,稍后再读取它们

foreach ($gp in $GPINFO) {

    # Code that gets the values for $gp, $aclBefore and $aclAfter is here

    $table = new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
    $table | Format-Table GPO_Name,Old_Owner,New_Owner
} 
如果你能帮我找出我做错了什么,那就太好了,我知道每次ForEach从$GPINFO中得到$gp,它都在运行$table,这就是我的问题。因此,不是一个连续的表,而是多个表,每个表中有一组数据


提前感谢

在循环完成后只需输出表格即可

$table = foreach ($gp in $GPINFO) {
    # Code that gets the values for $aclBefore and $aclAfter is here

    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
}
$table | Format-Table

foreach
循环中的任何输出都将存储在
$table
中。每次迭代将输出一个对象,最终创建一个存储在
$table

中的对象数组,只需在循环完成后输出该表即可

$table = foreach ($gp in $GPINFO) {
    # Code that gets the values for $aclBefore and $aclAfter is here

    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
}
$table | Format-Table

foreach
循环中的任何输出都将存储在
$table
中。每次迭代都将输出一个对象,最终创建一个存储在
$table

中的对象数组,但您不能从foreach()进行管道传输。这是语言中经常出现的一个奇怪的部分。其他途径:

Foreach对象:

$GPINFO | foreach-object {
    $gp = $_
    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
} | Format-Table GPO_Name,Old_Owner,New_Owner
调用运算符和脚本块:

& { 
  foreach ($gp in $GPINFO) {
      new-object psobject -Property @{
          GPO_Name = $gp.DisplayName
          Old_Owner = $aclBefore
          New_Owner = $aclAfter
      }
  } 
} | Format-Table GPO_Name,Old_Owner,New_Owner

你不能从foreach()开始吹管。这是语言中经常出现的一个奇怪的部分。其他途径:

Foreach对象:

$GPINFO | foreach-object {
    $gp = $_
    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
} | Format-Table GPO_Name,Old_Owner,New_Owner
调用运算符和脚本块:

& { 
  foreach ($gp in $GPINFO) {
      new-object psobject -Property @{
          GPO_Name = $gp.DisplayName
          Old_Owner = $aclBefore
          New_Owner = $aclAfter
      }
  } 
} | Format-Table GPO_Name,Old_Owner,New_Owner

1) 您到底希望发生什么,然后2)运行代码时实际发生了什么?您希望格式化循环后收集的列表…fornat表将显示字符串1)您到底希望发生什么,然后2)当您运行代码时,实际会发生什么?您想格式化循环后收集的列表…fornat表将显示StringThank,我尝试了,但是,我仍然在foreach中的$table中在新对象的前面。谢谢,我尝试了,但是,我仍然在foreach中的$table中在新对象的前面。