基于日期时间的 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
我在使用 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