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
答案 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