在Powershell中获取已启用但未锁定的Active Directory用户的列表

时间:2019-05-07 15:38:57

标签: powershell cmdlets cmdlet

我在cmdlet下面:

  get-aduser -filter {Enabled -eq 'true' -and LockedOut -eq 'true'} -Properties samaccountname, givenname, sn, physicalDeliveryOfficeName | 
             Select-Object -Property samaccountname, givenname, sn, physicalDeliveryOfficeName |
             Export-Csv -Encoding Default -path $csvOutputPath -NoTypeInformation

现在,我需要在上面的get-aduser cmdlet中添加一个过滤器以排除锁定的AD用户。...但是我不知道该怎么做。...

我知道我可以使用以下方法获得锁定的用户:

Search-ADAccount -UsersOnly -Locked

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果要将其保留在一个查询中,则可以针对UserAccountControl属性进行过滤。文档显示锁定的帐户已标记了0x0010(十六进制)或16(十进制基数10)位。因此,您应该能够使用按位AND运算符(带)来确定锁定状态。

get-aduser -filter {Enabled -eq 'true' -and (-not (UserAccountControl -band 16))} -Properties samaccountname, givenname, sn, physicalDeliveryOfficeName | 
             Select-Object -Property samaccountname, givenname, sn, physicalDeliveryOfficeName |
             Export-Csv -Encoding Default -path $csvOutputPath -NoTypeInformation

-not运算符用于未锁定的帐户。如果要查找锁定的帐户,可以将其删除。

从技术上讲,您可以对整个过滤器使用UserAccountControl,但是它并不容易理解。这是-band运算符在此处如何工作的示例:

# Enabled User not locked has useraccountcontrol = 512
[bool](512 -band 16)
False

# Enabled User locked has useraccountcontrol = 528
PS C:\temp\test1> [bool](528 -band 16)
True

# Locked Enabled User with expired password
[bool](8389136 -band 16)
True

有关用于确定UserAccountControl值的位的更多信息,请参见UserAccountControl Flags

有关按位运算符的更多信息,请参见About_Arithmetic_Operators