【问题标题】:Get-ADUser unable to sort by LastLogonDateGet-ADUser 无法按 LastLogonDate 排序
【发布时间】:2021-11-23 09:09:24
【问题描述】:

我正在尝试按我的禁用用户的最后一次登录日期对他们进行排序。

我使用了以下命令:

Get-ADUser -Filter "samaccountname -eq '$user' -and enabled -eq '$False'" -Properties * | 
select samaccountname, displayname, emailaddress, LastLogonDate |
Sort-Object -Property LastLogonDate

我不确定为什么,但它不会对 LastLogonDate 属性进行排序。我不断收到一份未排序的禁用用户列表。

【问题讨论】:

  • 我无法在选择相同属性的情况下重现该错误。它按预期从最旧到最新排序。
  • LastLogonDate 是从属性lastLogonTimeStamp 计算/转换的本地日期时间。它不会在整个域中复制,因此您需要遍历 DC 列表的搜索。 (Get-ADDomainController -Filter *).Hostname | ForEach-Object {..} 并为您找到的 LastLogonDate 选择最新值以获得最准确的日期。看看here
  • 顺便说一句。当您只关注一小部分属性时,使用-Properties * 是一个坏习惯。在您的情况下,默认情况下会返回 -Properties displayname, emailaddress, LastLogonDate,因为 SamAccountName 会在其他人中返回。

标签: powershell


【解决方案1】:

继续我的评论,我认为您显示的代码是循环内的部分,您可以在其中迭代用户,可能基于 CSV 文件的输入。

您的代码仅找到 一个 单个用户并在其 LastLogonDate 上对该对象进行排序。

排序应该在你收集了所有喜欢的用户之后进行

# capture the resulting objects from a collection of users
$result = foreach ($user in $MyListOfUserSamAccountNames) {
    Get-ADUser -Filter "samaccountname -eq '$user' -and enabled -eq '$False'" -Properties displayname, emailaddress, LastLogonDate | 
    Select-Object samaccountname, displayname, emailaddress, LastLogonDate
}
# here is where you sort the result for output
$result | Sort-Object -Property LastLogonDate

请记住,计算的属性 LastLogonDate(根本不是真正的 AD 属性)不会在域内复制,为了获得最准确的值,您需要迭代域中的域控制器。

【讨论】:

  • 谢谢,它有效。仅供参考,您对之前的评论是正确的。将 DC 部分添加到我的命令中也有效,但这个答案更容易。感谢您告知我-properties * 的使用情况。
猜你喜欢
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多