PowerShell - 如何在一个表中格式化两个不同命令的输出?

时间:2015-05-28 07:16:41

标签: powershell

Foreach($a In Get-GPO -All) { Foreach($b In $a | Get-GPPermissions -TargetName "Domain Admins" -TargetType Group) { $a.DisplayName; $b.Trustee.Name; $b.Permission } }

我使用该命令输出域管理员组的所有GPO权限。默认情况下,Get-GPPermissions结果不包含GPO名称字段。因此,我将Get-GPO和Get-GPPermissions结果组合在一起,以输出GPO名称,组名和权限。我需要输出以下样本。如何设计我的代码?

GPO Name                   Group Name        Permission
---------                  -----------       -------------
Default Domain Policy      Domain Users      GpoEditDeleteModifySecurity

2 个答案:

答案 0 :(得分:2)

您可以将对象传递给Select-Object以快速创建具有所需成员的PSObject:

Get-GPO -All | %{ 
    $permissions = $_ | Get-GPPermissions -TargetName 'Domain Admins' -TargetType Group
    $_ | Select-Object   @{Name='GPO Name';Expression={$_.DisplayName}}, 
                         @{Name='Group Name';Expression={$permissions.Trustee.Name}},
                         @{Name='Permission';Expression={$permissions.Permission}}
}

为了更接近原始线路,这样的事情可能更合适:

Foreach ($GPO in Get-GPO -All) { 
    Foreach ($permission in $gpo | Get-GPPermissions -TargetName 'Domain Admins' -TargetType Group) { 
        '' | Select-Object   @{Name='GPO Name';Expression={$gpo.DisplayName}}, 
                             @{Name='Group Name';Expression={$permission.Trustee.Name}},
                             @{Name='Permission';Expression={$permission.Permission}}
}

答案 1 :(得分:1)

我认为你看起来像PSObject。

首先,我们创建一个空数组,然后保存组合的foreach数据集。

然后我们运行脚本块并获取所需的值。将它们全部放入哈希表中,该哈希表将作为PSObject的属性集。

在foreach循环的每一端,我们将PSObject的输出放入$ obj,然后重新开始。

    $obj=@()
    Foreach($a In Get-GPO -All) 
    { Foreach($b In $a | Get-GPPermissions -TargetName "Domain Admins" -TargetType Group)
         { 
           $properties = @{ 'DisplayName'=$a.DisplayName;
                            'Trustee'=$b.Trustee.Name;
                            'Permission'=$b.Permission;
                          }
           $psobj = New-Object -TypeName psobject -Property $properties
           $obj+=$psobj
         } 
    }
Write-Output $obj