Bar*_*Vos 3 powershell active-directory windows-server-2008-r2
我正在尝试从 AD 获取 OU/DC 中所有用户的列表。
这就是我想出的:
$erroractionpreference = "SilentlyContinue"
function Get-GroupMembers {
$filter = "(&(objectCategory=person)(objectClass=user))"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $filter
$colResults = $objSearcher.FindAll()
foreach ($member in $colResults) {
$member
}
}
get-GroupMembers
Run Code Online (Sandbox Code Playgroud)
如果我将过滤器更改为
$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin"))
Run Code Online (Sandbox Code Playgroud)
什么都没有返回。为什么是这样?
我还想显示某些值(如果帐户处于活动状态或禁用状态等),但如果我通过管道连接$member
到gm
,我什么也得不到。
任何帮助将不胜感激。
如果要搜索特定的 OU,可以将其设置为搜索器对象的根:
$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU
Run Code Online (Sandbox Code Playgroud)
您还可以控制搜索范围。以下是与您最相关的两个选项:
# Option 1: Return only users in the 'Admin Accounts' OU
$objSearcher.SearchScope = "OneLevel"
# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it
$objSearcher.SearchScope = "SubTree"
Run Code Online (Sandbox Code Playgroud)
除非您覆盖搜索根和范围,否则您将默认对当前域的根执行子树搜索。您可以在这篇 TechNet 文章中找到更多详细信息:
编辑:正如 uSlackr 指出的,你的直流分量确实看起来很可疑。我在示例中保留了它,但无论您使用什么方法,不完整/格式错误的基本对象名称都会破坏您的搜索。
直流分量不完整。它应该看起来像这样:
$filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com"))
Run Code Online (Sandbox Code Playgroud)
但 dc=admin,dc=com 应该从本例中的 AD 域名“admin.com”转换而来,这似乎不正确
使用 Microsoft AD cmdlet,这要容易得多。
get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com"
Run Code Online (Sandbox Code Playgroud)
TechNet上提供了有关下载和使用 cmdlet 的信息
归档时间: |
|
查看次数: |
17087 次 |
最近记录: |