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

通过PowerShell批量延长AD账户有效期并导出至CSV的问题

解决方案

一、修改脚本实现自动计算到期日并导出CSV

原命令依赖固定日期,下面的脚本会自动计算当前日期起6个月后的到期时间,同时记录每个用户的新到期日期并导出为CSV:

# 自动计算当前日期加6个月后的到期时间
$expirationDate = (Get-Date).AddMonths(6)
# 初始化数组存储结果
$operationResults = @()

# 遍历用户列表并处理
Get-Content C:\adextensions.txt | ForEach-Object {
    $targetUser = $_
    try {
        # 设置账户到期日
        Set-ADAccountExpiration -Identity $targetUser -DateTime $expirationDate -ErrorAction Stop
        # 获取用户实际到期日期(验证设置结果)
        $userDetails = Get-ADUser -Identity $targetUser -Properties AccountExpirationDate
        # 记录成功结果
        $operationResults += [PSCustomObject]@{
            Username = $userDetails.SamAccountName
            NewExpirationDate = $userDetails.AccountExpirationDate.ToString("yyyy-MM-dd HH:mm")
        }
    }
    catch {
        # 捕获并记录错误信息
        $operationResults += [PSCustomObject]@{
            Username = $targetUser
            NewExpirationDate = "执行失败: $($_.Exception.Message)"
        }
    }
}

# 导出结果到CSV文件
$operationResults | Export-Csv -Path C:\AD_Account_Expiration_Updates.csv -NoTypeInformation -Encoding UTF8

脚本说明:

  • 用(Get-Date).AddMonths(6)自动计算到期日,无需手动维护固定日期
  • 加入错误捕获机制,单个用户操作失败不会中断整个脚本执行
  • 导出的CSV包含用户名和精确到分钟的新到期时间,失败用户会标记错误原因
  • 通过Get-ADUser验证设置后的到期日期,确保数据准确性

二、解决"Insufficient access rights"权限报错

添加Get-Credential后出现权限错误,核心原因是你指定的凭据没有修改AD账户有效期的权限——原脚本以管理员身份运行时,使用的是当前管理员会话的高权限凭据,所以能正常执行。解决方法如下:

方法1:使用有权限的凭据执行

运行Get-Credential时输入拥有AD账户修改权限的账号(如域管理员账号),并在AD命令中传递该凭据:

$authorizedCred = Get-Credential
$expirationDate = (Get-Date).AddMonths(6)
$operationResults = @()

Get-Content C:\adextensions.txt | ForEach-Object {
    $targetUser = $_
    try {
        Set-ADAccountExpiration -Identity $targetUser -DateTime $expirationDate -Credential $authorizedCred -ErrorAction Stop
        $userDetails = Get-ADUser -Identity $targetUser -Properties AccountExpirationDate -Credential $authorizedCred
        $operationResults += [PSCustomObject]@{
            Username = $userDetails.SamAccountName
            NewExpirationDate = $userDetails.AccountExpirationDate.ToString("yyyy-MM-dd HH:mm")
        }
    }
    catch {
        $operationResults += [PSCustomObject]@{
            Username = $targetUser
            NewExpirationDate = "执行失败: $($_.Exception.Message)"
        }
    }
}

$operationResults | Export-Csv -Path C:\AD_Account_Expiration_Updates.csv -NoTypeInformation -Encoding UTF8

方法2:直接以管理员身份运行脚本

如果你的当前账号本身拥有AD管理权限,无需额外添加Get-Credential——右键PowerShell选择「以管理员身份运行」,执行修改后的脚本即可,会话会自动使用管理员权限执行命令。

注意:域环境中,只有加入域管理员组或拥有「修改账户到期日期」AD权限的账号,才能执行此类操作。

内容的提问来源于stack exchange,提问作者S.Mahmood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:45:18