【问题标题】:Format-Table in PowerShell inside a ForEachForEach 内 PowerShell 中的格式表
【发布时间】:2020-02-15 00:36:42
【问题描述】:

不确定我在这里做错了什么,我知道这与它位于 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 的东西,这就是我的问题。因此,我最终得到的不是一个连续的表,而是多个表,每个表都有一组数据。

提前致谢

【问题讨论】:

  • 1) 您到底期望发生什么,然后 2) 运行代码时实际发生了什么?
  • 您想格式化您在循环之后收集的列表...fornat-table 将显示一个字符串

标签: powershell foreach formattable


【解决方案1】:

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

$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 中有 $table。
【解决方案2】:

你只是不能从 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

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2017-09-06
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多