基于日期时间的 Powershell AD 过滤

Powershell AD filtering on datetime

我在使用 Get-ADUser commandlet 让我的 LDAP 过滤器正常工作时遇到了一些问题。我正在尝试创建一个小脚本来搜索 AD 中的所有用户,如果他们的到期日期超过 30 天,则禁用该用户并将其移至禁用的用户 OU。

到目前为止我有以下内容:

$filterString = "
(&
    (AccountExpires>=1)
    (AccountExpires<=$([DateTime]::Now.ToFileTime()))
    (!(UserAccountControl:1.2.840.113556.1.4.803:=2))
)" -replace "`r`n"

$UsersToDisable = Get-ADUser -LDAPFilter $filterString
if($UsersToDisable -ne $null) {
    #$UsersToDisable | Disable-ADAccount
    Write-Output "`n"
    Write-Output "The following users have been disabled as their accounts have expired"
    foreach ($user in $UsersToDisable){
        #Write-Output $user.UserPrincipalName
        Get-ADUser -Identity $user -Properties AccountExpirationDate | Select UserPrincipalName, AccountExpirationDate | Write-Output
        #Get-ADUser -Identity $user | Move-ADObject -TargetPath "OU=Disabled Users,DC=domain,DC=local"
        }
    }

显然过滤器只选择今天日期之前的东西。我还尝试使用

创建过滤器
$then = (Get-Date).AddDays(-30)

但是,我似乎找不到将它集成到 $filterstring 中的方法。我可以使用 Get-ADUser -filter 提取数据,但按位过滤器不起作用。

我该如何解决这个问题?

感谢@AdminOfThings 的评论。

我们可以使用下面的 LDAP 过滤器来获取 30 天前帐户被禁用的 AD 用户列表。

$then = (Get-Date).AddDays(-30).Date.ToFileTime() 
$filterString = "
(&
    (AccountExpires>=1)
    (AccountExpires<=$then)
    (!(UserAccountControl:1.2.840.113556.1.4.803:=2))
)" -replace "\r?\n"
$UsersToDisable = Get-ADUser -LDAPFilter $filterString