0

我當前使用腳本來顯示分配給安全組的所有計算機。我目前使用的腳本是一個VB腳本:在具有特定安全組的OU中列出對象

Set objGroup = GetObject("LDAP://cn=My Group,ou=Security Groups,ou=_Groups - standard,ou=city,ou=state,dc=my,dc=domain,dc=tld,") 
For Each objMember in objGroup.Members 
Wscript.Echo objMember.Name 
Next 

此腳本工作並從整個域拉動我的組的每個成員。這工作,但我試圖過濾一下。我想通過特定的OU搜索計算機。我試過以下代碼無濟於事:

Dim objGroup 
Dim objMachine 
Dim objMatch 

Set objGroup = GetObject("LDAP://cn=My Group,ou=Security Groups,ou=_Groups - standard,ou=city,ou=state,dc=my,dc=domain,dc=tld") 
Set objMachine = GetObject("LDAP://ou=Building,ou=street,ou=city,ou=state,dc=my,dc=domain,dc=tld") 

Dim c 
For each c in objGroup 
if c = objMachine Then 
Wscript.Echo objMachine.Name 
end if 
next 

該代碼執行時沒有錯誤,但沒有看到任何輸出。然後我決定在PowerShell中解決這個問題。

$computer = Get-ADGroup -searchbase 'ou=Building,ou=street,ou=city,ou=state,dc=my,dc=domain,dc=tld' -Filter * ` | 
Get-ADGroup -Filter {(Name -eq "My Group") -or (Name -eq "My Other Group")} ` | 
Select-Object -Unique ` | 
Sort-Object DistinguishedName; 
$computer | Select-Object Name, DistinguishedName; 
export-csv C:\Temp\Result.csv 

此拋出ISE幾個錯誤,指出該cmdlet獲取,廣告組不支持管道輸入或輸入不匹配。最後,它列出了這兩個團體,以及他們的尊敬的名字。

我想獲得計算機名稱以及每個計算機的專有名稱,該計算機是構建OU中的「我的組」或「我的其他組」的成員以及該OU下的每個OU。我更喜歡在PowerShell中使用它的方法,但我也可以使用VB腳本。

(很抱歉,如果我錯過任何重要的信息,這是我第一次發佈。)

回答

0

打破了這個任務分爲:

  1. 查找組成員
  2. 確定他們是否居住在OU

查找組成員很容易與Get-ADGroupMember

$Members = Get-ADGroupMember "SecurityGroup" 

要確定一個成員是否駐留在OU,請檢查該OU分辨名稱會員的專有名稱的最後部分匹配:

$OU = "OU=Specific,OU=Computers,OU=Office1,DC=domain,DC=tld" 
$MembersInOu = $Members |Where-Object {$_.DistinguishedName -like "*,$OU"} 

現在,您可以將它變成一個流水線:

Get-ADGroupMember "SecurityGroup" |Where-Object {$_.DistinguishedName -like "*,$OU"} 
+0

大多數情況下,這種方法效果很好。當我試圖在一個大組中執行時,我只是遇到了以下錯誤:'FullyQualifiedErrorId:超出了此請求的大小限制,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember',我不知道要如何破壞它進一步下跌。 – Rikai

相關問題