使用过滤器从活动目录中获取所有用户

Posted

技术标签:

【中文标题】使用过滤器从活动目录中获取所有用户【英文标题】:Get all users from active directory using filter 【发布时间】:2018-11-06 17:54:04 【问题描述】:

我正在尝试使用以下脚本从 AD 获取所有活跃用户,但是,尽管我知道有值为 512 的数据,但我没有得到任何结果。

你知道我有什么问题吗?

  Get-ADUser -filter $userAccountControl -eq "512" -properties Name,userAccountControl -Server myserver.local | Export-CSV "E:\Folder\ADusers.csv" -NoTypeInformation -Encoding UTF8

【问题讨论】:

$userAccountControl 中有什么? Get-ADUser -filter userAccountControl -band [int]512 警告:userAccountControl 是位图(即,被视为一系列位的整数,其中每个位置代表开/关状态) - 请参阅@dev.greg 的答案。 好吧,我已经尝试使用 -band ...但仍然出现错误:Get-ADUser:术语“Get-ADUser”未被识别为 cmdlet、函数、脚本文件的名称,或可运行的程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 E:\AD\ad_script_test_2.ps1:1 char:1 + Get-ADUser -filter userAccountControl -band [int]512 -properties Na ... + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound : (Get-ADUser:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 【参考方案1】:

正如 cmets 中所指出的,$ 不属于。这告诉 PowerShell 您要使用名为$userAccountControl 的变量中的值并将其与512 进行比较。考虑到您可能从未设置过名为 $userAccountControl 的变量,这意味着它与 512 没有进行任何比较,并且发现并非对每个帐户都适用。

删除$,它会将名为userAccountControl 的属性与512 进行比较。

Get-ADUser -filter userAccountControl -eq "512" -properties Name,userAccountControl -Server myserver.local | Export-CSV "E:\Folder\ADusers.csv" -NoTypeInformation -Encoding UTF8

【讨论】:

不起作用,似乎语法不正确:“Get-ADUser : 术语 'Get-ADUser' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称. 检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 E:\AD\ad_script_test_2.ps1:1 char:1 + Get-ADUser -filter userAccountControl -eq " 512" -properties Name,us ... + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-ADUser:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException" 听起来您还没有加载 ActiveDirectory 模块。先这样做:Import-Module ActiveDirectory 如果您仍然收到 The term 'Get-ADUser' is not recognized 错误,这意味着 PowerShell 不知道 Get-ADUser 的含义。 ActiveDirectory 模块未安装或未加载。你需要先解决这个问题。 您可以在此处找到安装说明(按照您的 Windows 版本的步骤操作):4sysops.com/wiki/… 正确,该模块不在测试服务器上,当我在产品服务器上运行它时,它工作正常。谢谢;)【参考方案2】:

你可以试试 LDAPfilter 语法

Get-ADUser -property userAccountControl -LDAPfilter "(userAccountControl=512)"

但是,这可能不是一个好方法:userAccountControl 是一个二进制字段,每个位代表一个二进制值(请参阅https://support.microsoft.com/en-us/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro) 例如:

512 是你想要的“普通帐户”

66048 是“普通账户”+“密码不会过期”,你可能也想要

514 是 "普通帐户" + "帐户已禁用" ,您可能不想要

所有值都会匹配

-band 512

您需要明确什么是活跃用户。

【讨论】:

是的,我的意思是 512 状态。但是,它不起作用。看起来语法不正确。

以上是关于使用过滤器从活动目录中获取所有用户的主要内容,如果未能解决你的问题,请参考以下文章

如何从活动目录中获取用户列表?

powershell 从活动目录中获取Windows用户所属的广告组

当成员属性不起作用时,从活动目录中检索组成员/成员资格

在 ios 应用程序中使用活动目录用户验证 Web 服务?

powershell Powershell脚本获取OU的所有活动目录用户并生成计数

读取/过滤分发组的活动目录的子组?