【问题标题】:Get-ADUser Filter AccountExpirationDate获取 ADUser 过滤器 AccountExpirationDate
【发布时间】:2023-02-10 21:54:40
【问题描述】:

我观察到 Active Directory 日期对象的设置方式与使用 -Filter 检索和搜索它们的方式之间存在差异。观察:

首先我设置一个到期日期:

PS C:\WINDOWS\system32> set-aduser testaccount -AccountExpirationDate '12/25/2024 00:05:00' -Credential $CRED 

PS C:\WINDOWS\system32> Get-ADUser testaccount -Properties AccountExpirationDate 


AccountExpirationDate : 12/25/2024 12:05:00 AM
DistinguishedName     : CN=Test Account,OU=Test,OU=CU Users,DC=ad,DC=contosso,DC=com
Enabled               : True
GivenName             : Systems
Name                  : Test Account
ObjectClass           : user
ObjectGUID            : {snip}
SamAccountName        : testaccount
SID                   : {snip}
Surname               : Test1c
UserPrincipalName     : testaccount@contosso.com

然后我尝试搜索具有该到期日期的所有用户,有几种方法:

PS C:\WINDOWS\system32> Get-ADUser -Filter 'AccountExpirationDate -eq "12/25/2024 00:05:00"' -Credential $CRED

PS C:\WINDOWS\system32> 
PS C:\WINDOWS\system32> Get-ADUser -Filter 'AccountExpirationDate -eq "12/25/2024 12:05:00 AM"' -Credential $CRED

PS C:\WINDOWS\system32> 

PS C:\WINDOWS\system32> $T=(get-date '12/25/2024 12:05:00 AM')

PS C:\WINDOWS\system32> Get-ADUser -Filter 'AccountExpirationDate -eq $T' -Credential $CRED

PS C:\WINDOWS\system32> 

纳达。我想我在 AD 如何存储该日期值以及如何检索和显示它之间遗漏了一些东西。

【问题讨论】:

  • 您需要一个日期时间:Get-ADUser -Filter "AccountExpirationDate -eq [DateTime].Parse('12/25/2024 12:05:00 AM')" -Credential $CRED
  • @jdweng 不,那是错误的。
  • @jdweng 几乎是正确的:PS C:\WINDOWS\system32> $T=[DateTime]"12/25/2024 12:05:00 AM" PS C:\WINDOWS\system32> Get-ADUser -Filter 'AccountExpirationDate -eq $T' 但是还是不行。

标签: powershell active-directory


【解决方案1】:

AccountExpirationDate是AD Module给出的友好属性,表示从AccountExpires的文件时间开始翻译。查看您的 sn-ps,其中之一应该可以正常工作:

Get-ADUser -Filter 'AccountExpirationDate -eq $T'

以上只是失败,因为您在 AccountExpirationDate 中看到的日期已转换为您的本地时间,如果您想查询具有该确切日期设置的用户,您需要事先转换该日期 ToUniversalTime()

$T = (Get-Date '12/25/2024 12:05:00 AM').ToUniversalTime()
Get-ADUser -Filter 'AccountExpirationDate -eq $T' -Credential $CRED

在这种情况下,在使用 literal string ' 时,datetime 实例 ($T) 将按原样传递给 AD 筛选器提供程序,然后将此日期转换为 .FileTime()

其他示例永远不会工作,因为 AD 过滤器正在接收格式为 MM/dd/yyyy HH:mm:ss 的日期,并且它不知道如何处理该日期。

如果你想使用可扩展字符串"对于您的过滤器,您需要执行以下操作:

$date = (Get-Date '12/25/2024 12:05:00 AM').ToUniversalTime().ToFileTime()
# this:
Get-ADUser -Filter "accountExpires -eq '$date'"
# or this:
Get-ADUser -Filter "accountExpirationDate -eq '$date'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多