You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell在指定时间自动禁用AD用户

无需任务计划程序实现指定时间自动禁用AD用户

可以做到,以下是两种可行的PowerShell方案,不过都依赖PowerShell进程持续运行(关闭窗口或终止进程会导致任务中断):

方案1:通过Start-Sleep计算等待时间

先算出当前时间到目标时间的间隔,等待后执行禁用命令:

# 设置目标执行时间(示例为当天11:30,若已过则自动顺延至次日)
$targetTime = Get-Date "11:30"
if ($targetTime -lt (Get-Date)) {
    $targetTime = $targetTime.AddDays(1)
}

# 计算需要等待的毫秒数
$waitDuration = ($targetTime - (Get-Date)).TotalMilliseconds

# 等待至目标时间
Start-Sleep -Milliseconds $waitDuration

# 执行AD用户禁用命令
Disable-ADAccount -Identity "username"

方案2:使用定时器事件监听

通过System.Timers.Timer创建定时触发事件,到点自动执行命令:

# 设置目标执行时间
$targetTime = Get-Date "11:30"
if ($targetTime -lt (Get-Date)) {
    $targetTime = $targetTime.AddDays(1)
}

# 计算距离目标时间的毫秒数
$delayMs = ($targetTime - (Get-Date)).TotalMilliseconds

# 创建定时器,仅触发一次
$timer = New-Object System.Timers.Timer
$timer.Interval = $delayMs
$timer.AutoReset = $false

# 注册定时器触发事件,执行禁用操作
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action {
    Disable-ADAccount -Identity "username"
    $sender.Stop() # 触发后停止定时器
} | Out-Null

# 启动定时器
$timer.Start()

注意事项

  • 两种方案都需要保持PowerShell进程处于运行状态,一旦关闭窗口或终止进程,定时任务会失效。
  • 你提到的Set-ADUser -Identity username -AccountExpirationDate是设置账户过期日期,和直接禁用账户的行为不同:过期账户无法登录,但账户状态并非“已禁用”;如果需要明确将账户标记为禁用状态,优先使用Disable-ADAccount命令。

内容的提问来源于stack exchange,提问作者The Freelancer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:55:15