首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ADSI提取AD用户信息

通过ADSI提取AD用户信息
EN

Stack Overflow用户
提问于 2015-06-08 13:43:00
回答 2查看 20K关注 0票数 1

如何通过ADSI为用户获取这些属性,这些属性来自Get-ADUser,我需要与ADSI等效的属性。

  • 已启用
  • PasswordNeverExpires
  • PasswordExpired
  • 名字
  • SamAccountName
  • 邮件
  • PasswordLastSet

我的目标是查询所有用户的整个域并获取这些属性。

我尝试使用Get-ADUser cmdlet,它在查询用户时超时。

代码语言:javascript
复制
Get-ADUser -Filter * -Properties enabled,PasswordNeverExpires,passwordexpired,Name,SamAccountName,mail,passwordla‌​stset -server sc |
   where {$_.Enabled -eq "True"} |
   where { $_.PasswordNeverExpires -eq $false } |
   where { $_.passwordexpired -eq $false } |
   Select Name,SamAccountName,mail,
          @{l='PasswordExpires';e={$_.passwordlastset+(Get-ADDefa‌​ultDomainPasswordPolicy).MaxPasswordAge}},
          @{l='DaystoExpire';e={(New-TimeSpan -Start (get-date) -end ($_.passwordlastset+(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge)).days}}

上面的命令适用于几个用户,但是如果我查询一大组用户,它就会提供无效的枚举上下文。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-08 19:13:07

属性SamAccountNameNameMail对应于同名AD属性。PasswordLastSet是从属性pwdLastSet派生的。其他3个属性(EnabledPasswordNeverExpiresPasswordExpired)是userAccountControl属性中的标志。

使用带有LDAP查询的adsisearcher对象搜索AD以查找用户对象,然后使用所需的属性构建自定义对象:

代码语言:javascript
复制
$ACCOUNTDISABLE       = 0x000002
$DONT_EXPIRE_PASSWORD = 0x010000
$PASSWORD_EXPIRED     = 0x800000

$searcher = [adsisearcher]"(&(objectClass=user)(objectCategory=person))"
$searcher.FindAll() | % {
  $user = [adsi]$_.Properties.adspath[0]
  New-Object -Type PSCustomObject -Property @{
    SamAccountName       = $user.sAMAccountName[0]
    Name                 = $user.name[0]
    Mail                 = $user.mail[0]
    PasswordLastSet      = [DateTime]::FromFileTime($_.Properties.pwdlastset[0])
    Enabled              = -not [bool]($user.userAccountControl[0] -band
                           $ACCOUNTDISABLE)
    PasswordNeverExpires = [bool]($user.userAccountControl[0] -band
                           $DONT_EXPIRE_PASSWORD)
    PasswordExpired      = [bool]($user.userAccountControl[0] -band
                           $PASSWORD_EXPIRED)
  }
}

尽管如此,为什么您想要解决所有这些麻烦,而不是简单地使用Get-ADUser来达到相同的目的呢?

代码语言:javascript
复制
Import-Module ActiveDirectory

$attributes = 'SamAccountName', 'Name', 'Mail', 'PasswordLastSet', 'Enabled',
              'PasswordNeverExpires', 'PasswordExpired'

Get-ADUser -Filter * -Properties $attributes | select $attributes
票数 7
EN

Stack Overflow用户

发布于 2015-06-08 13:50:04

您可以在Get-Item Powershell驱动器上使用AD:\,此cmdlet接受-properties参数来检索指定的属性列表。使用星号将使cmdlet检索所有属性。举个例子:

代码语言:javascript
复制
get-aduser -filter "sAMAccountName -like '*'" | % { get-item "AD:\$($_.distinguishedName)" -properties enabled,PasswordNeverExpires,passwordexpired,Name,SamAccountName,mail,passwordlastset }

编辑:对于计算出的属性,包括“已启用”、“密码永不过期”等,Get-ADUser也可以接受-properties参数,因此代码如下:

代码语言:javascript
复制
get-aduser -filter "sAMAccountName -like '*'" -properties enabled,PasswordNeverExpires,passwordexpired,Name,SamAccountName,mail,passwordlastset

星号也很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30710755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档