2012-04-23 119 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返回(連接到本機AD agroups的列表,並與剛剛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 =新對象System.Collections.ArrayList $ array.AddRange($ active_d)$ current_output.DataSource = $ array $ current_output.refresh()}我現在正在使用上述但它不工作 – obious 2012-04-24 09:51:53

+0

此外,你可以簡要解釋 - 替換'^ CN =([^,] +),OU =。+ $','$ 1' please? – obious 2012-04-24 10:21:29

+1

正則表達式捕獲CN =和下一個逗號之間的任何內容,([^,] +)表示任何不是逗號的字符。捕獲正在取代整個字符串。 – 2012-04-24 11:51:01

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 2012-04-23 16:57:42

+0

嘗試我的編輯,但它可能有一些錯誤,我現在不能測試。 – 2012-04-23 17:27:58

1

奧林,

不要忘記你的朋友DSQUERY和DSGET他們使用PowerShell工作相當好。

你做一個DSQUERY,然後管道是正確的進入DSGET -memberof使用PowerShell以及如果需要修剪在foreach對象{$ _ trimstart(」「)}

玩它,讓我們知道您的使用。

DC