2015-05-28 2 views
1
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 для вывода имени объекта групповой политики, имени группы и разрешения. Мне нужно вывести ниже образца. Как создать код?PowerShell - Как отформатировать вывод двух разных команд в одной таблице?

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

ответ

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

Я думаю, что вы ищете что-то вроде PSObject.

Сначала мы создаем пустой массив, который затем будет содержать объединенные наборы данных foreach.

Затем мы запустим блок сценария и подберем требуемые значения. Поместите их все в хэш-таблицу, которая будет работать как набор свойств для объекта PSObject.

На каждом конце цикла foreach мы выставляем вывод PSObject в $ obj, а затем начинаем все заново.

[email protected]() 
    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 
+0

Было бы здорово, если бы вы расширили этот ответ с помощью подробного объяснения того, что вы делаете (создания новых объектов, содержащих требуемые свойства). – briantist

Смежные вопросы