用于禁用OU中过期用户的Powershell脚本
我一直在尝试创建一个Powershell脚本来禁用已过期的帐户(AccountExpires) 这会生成一个有到期日期的帐户列表,但我似乎无法生成一个已经过期的帐户列表,那么如何一次性禁用它们用于禁用OU中过期用户的Powershell脚本,powershell,active-directory,Powershell,Active Directory,我一直在尝试创建一个Powershell脚本来禁用已过期的帐户(AccountExpires) 这会生成一个有到期日期的帐户列表,但我似乎无法生成一个已经过期的帐户列表,那么如何一次性禁用它们 谢谢虽然您可以执行获取ADUser-Filter*并在客户端过滤掉帐户,但每次都会通过网络传输广告中的所有用户对象,但您会立即丢弃99%的用户对象。当目录中有许多用户对象时,这有点浪费 我更喜欢让服务器端过滤对象,这可以通过LDAP过滤器实现。“所有已启用的过期帐户”的筛选器如下所示: (& (Accou
谢谢虽然您可以执行
获取ADUser-Filter*
并在客户端过滤掉帐户,但每次都会通过网络传输广告中的所有用户对象,但您会立即丢弃99%的用户对象。当目录中有许多用户对象时,这有点浪费
我更喜欢让服务器端过滤对象,这可以通过LDAP过滤器实现。“所有已启用的过期帐户”的筛选器如下所示:
(&
(AccountExpires>=1)
(AccountExpires=1
和AccountExpires您似乎想要确定用户子集的帐户过期状态。然后您想要禁用已经过期的用户。下面的代码应该可以帮助您更接近您的目标
$CurrentTime = (Get-Date).ToFileTime()
$CalculatedProperty = @{
Label='AccountExpires'
Expression = { if (!$_.AccountExpires -or $_.AccountExpires -ge [datetime]::MaxValue.ToFileTime()) {
"Never"
}
elseif ($_.AccountExpires -le $CurrentTime) {
"Expired"
}
else {
[datetime]::FromFileTime($_.AccountExpires)
}
}
}
$users = Get-ADUser -filter "Enabled -eq '$true'" -SearchBase "OU Goes Here" -Properties AccountExpires |
Select-Object SamAccountName,Name,$CalculatedProperty
$users | Where AccountExpires -eq 'Expired' | Foreach-Object {
Disable-ADAccount -Identity $_.SamAccountName -WhatIf
}
$users
将包含所有用户对象和帐户过期状态。如果您对结果满意,则需要删除-WhatIf
参数。如果运行$users | Where AccountExpires-eq'Expired'
,您将看到哪些帐户将成为禁用的目标。条件$\uuNexpires-和$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。
$filterString = "
(&
(AccountExpires>=1)
(AccountExpires<=$([DateTime]::Now.ToFileTime()))
(!(UserAccountControl:1.2.840.113556.1.4.803:=2))
)" -replace "`r`n"
Get-ADUser -LDAPFilter $filterString | Disable-ADAccount -WhatIf
$CurrentTime = (Get-Date).ToFileTime()
$CalculatedProperty = @{
Label='AccountExpires'
Expression = { if (!$_.AccountExpires -or $_.AccountExpires -ge [datetime]::MaxValue.ToFileTime()) {
"Never"
}
elseif ($_.AccountExpires -le $CurrentTime) {
"Expired"
}
else {
[datetime]::FromFileTime($_.AccountExpires)
}
}
}
$users = Get-ADUser -filter "Enabled -eq '$true'" -SearchBase "OU Goes Here" -Properties AccountExpires |
Select-Object SamAccountName,Name,$CalculatedProperty
$users | Where AccountExpires -eq 'Expired' | Foreach-Object {
Disable-ADAccount -Identity $_.SamAccountName -WhatIf
}