2012-04-23 2 views
2

Я пытаюсь использовать приведенный ниже код, чтобы получить список групп AD, в которых находится целевая машина, но у меня есть некоторые трудности.Powershell - Получение и организация групп каталогов Active Directory

Get-AdComputer -Identity $hostname -property "MemberOf" 

Когда я выполняю код, я возвращаюсь с этим.

DistinguishedName : CN=$hostname,OU=test,OU=test,OU=test All Workstations,DC=te 
       st,DC=test,DC=com 
DNSHostName  : $hostname Enabled   : True 
MemberOf   : {CN=Flash_Player_Adobe_11.1.102_LCL,OU=test All Softw 
        are Groups,DC=test,DC=test,DC=test, CN=Adobe Acrobat X P 
        rofessional 10,OU=test All Software Groups,DC=test,DC=test,D 
        C=co.uk, CN=Silverlight_Microsoft_4.0.60.0_LCL,OU=test 
       All Software Groups,DC=test,DC=test,DC=test} 
Name    : %hostname ObjectClass  : computer 
ObjectGUID  : 5cf00026-c91a-422e-8a3e-7ee546456717f 
SamAccountName : Test 
SID    : f-1-5-21-18934363546-5655752-5353453-564535 
UserPrincipalName : 

Есть ли способ, что я могу просто memberOf вернулся (список agroups AD прикрепленного к машине и упорядочен в списке с только именем группы listsed Например просто:.

Silverlight_Microsoft_4.0.60.0_LCL 
Adobe Acrobat XP Professional 

и т.д.

ответ

2

Вы можете использовать регулярное выражение для извлечения имен групп:

(Get-ADComputer -Identity $hostname -Property MemberOf).MemberOf -replace '^CN=([^,]+),OU=.+$','$1' 
+0

Спасибо, это сработало. Не могли бы вы помочь мне с этим, пожалуйста? Я пытаюсь получить выведенные имена групп и помещать их в форму DataGridView, но все, что я получаю, это числа, которые выводятся в DatagridView. функция Get-AD {$ active_d = (Get-ADComputer -Identity $ current_hostname.text -Property MemberOf) .MemberOf -replace '^ CN = ([^,] +), OU =. + $', '$ 1' $ array = New-Object System.Collections.ArrayList $ array.AddRange ($ active_d) $ current_output.DataSource = $ array $ current_output.refresh()} Я использую вышеописанное на данный момент, но он не работает – obious

+0

Кроме того, не могли бы вы кратко объясните-замените '^ CN = ([^,] +), OU =. + $', '$ 1' , пожалуйста? – obious

+1

Регулярное выражение фиксирует что-либо между CN = и следующей запятой, ([^,] +) означает любой символ, который не является запятой. Захват заменяет всю строку. –

1

попробовать это:

Get-AdComputer -Identity $hostname -property "MemberOf" | select -expand memberOf 

Редактировать после комментария:

попробовать это я не могу проверить это сейчас

Get-AdComputer -Identity $hostname -property "MemberOf" | select -expand memberOf | % { ($_.split(','))[0].replace('CN=','')} 
+0

Спасибо. Это сработало, но как бы вы посоветовали мне фильтровать результаты, чтобы отображалось только имя приложения? – obious

+0

Попробуйте мое редактирование, но возможно, есть ошибка, я не могу проверить сейчас. –

1

Orrin,

Не забывайте своих друзей Dsquery и Dsget они отлично работают с PowerShell, а также.

Вы делаете DSQUERY, а затем трубопроводный его прямо в DSGET -memberof с PowerShell и при необходимости облицовки с Еогеасп-объектом {$ _ trimstart (»«)}

Играть с ним и дайте нам знать, что вы использовать.

постоянного тока

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