列出具有特定安全组的 OU 中的对象
List objects in OU with specific security group
我目前使用脚本来显示分配给安全组的所有计算机。我目前使用的脚本是 VB 脚本:
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 Get-ADGroup 不支持管道输入或输入不匹配。最后,它列出了这两个组,以及它们的专有名称。
我想获得一个计算机名称,以及建筑物 OU 中 "My Group" 或 "My Other Group" 成员的每台计算机的专有名称以及该建筑物下的每个 OU欧。我更喜欢在 PowerShell 中执行此操作的方法,但我也可以使用 VB 脚本。
(抱歉,如果我遗漏了任何重要信息,这是我的第一篇文章。)
将此任务分解为:
- 查找群组成员
- 确定他们是否驻留在 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"}
我目前使用脚本来显示分配给安全组的所有计算机。我目前使用的脚本是 VB 脚本:
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 Get-ADGroup 不支持管道输入或输入不匹配。最后,它列出了这两个组,以及它们的专有名称。
我想获得一个计算机名称,以及建筑物 OU 中 "My Group" 或 "My Other Group" 成员的每台计算机的专有名称以及该建筑物下的每个 OU欧。我更喜欢在 PowerShell 中执行此操作的方法,但我也可以使用 VB 脚本。
(抱歉,如果我遗漏了任何重要信息,这是我的第一篇文章。)
将此任务分解为:
- 查找群组成员
- 确定他们是否驻留在 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"}