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

PowerShell解析DD-MMM-YYYY格式CSV设置AD账号过期日期咨询

场景说明

HR部门离职管理系统会不定期推送待离职、已离职人员报表,报表仅包含员工ID(Employee ID)字段,未提供AD账号sAMAccountName、邮箱信息。现有处理脚本通过员工ID匹配AD账号获取sAMAccountName供后续操作使用,原始脚本如下:

Import-Csv -Path C:\Users\Leaver.csv | ForEach-Object {
    $EmployeeNumber = $_.EmployeeNumber
    $TerminationDate = $_.TerminationDate
    $objADUser = (Get-ADUser -Filter {employeeid -eq $EmployeeNumber}).samAccountName
} 
现存问题
  • 报表中$TerminationDate字段值为员工最后工作日,并非离职后首个非工作日
  • 直接传入该日期执行账号过期设置命令,会导致员工最后工作日当天账号无法正常登录:
Set-ADAccountExpiration -Identity $objADUser -DateTime "$TerminationDate"

手动为日期值拼接23:59:59时间后缀时,PowerShell无法正常识别带变量的拼接值;同时CSV内日期为DD-MMM-YYYY格式(示例:01-Jan-2000),默认日期解析逻辑存在兼容问题。

适配实现方案

核心处理逻辑分为三步:一是强制兼容英文月份缩写的日期格式解析,二是通过时间对象方法生成最后工作日23:59:59的合法时间值,三是补全异常校验避免脚本执行中断。
完整可直接运行的脚本如下:

Import-Csv -Path C:\Users\Leaver.csv | ForEach-Object {
    $EmployeeNumber = $_.EmployeeNumber
    $rawTermDate = $_.TerminationDate

    # 严格匹配DD-MMM-YYYY格式解析日期,指定英文区域配置兼容月份缩写
    $parsedTermDate = [datetime]::ParseExact(
        $rawTermDate,
        "dd-MMM-yyyy",
        [System.Globalization.CultureInfo]::GetCultureInfo("en-US")
    )

    # 生成最后工作日当天23:59:59的时间对象,无需字符串拼接
    $accountExpireTime = $parsedTermDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59)

    # 匹配AD账号,增加空值校验
    $targetADUser = Get-ADUser -Filter "employeeid -eq '$EmployeeNumber'"
    if (-not $targetADUser) {
        Write-Warning "员工ID:$EmployeeNumber 无匹配AD账号,跳过处理"
        return
    }

    # 执行账号过期设置
    Set-ADAccountExpiration -Identity $targetADUser.SamAccountName -DateTime $accountExpireTime
}

关键逻辑说明

  • 日期解析采用ParseExact强类型匹配,指定en-US区域配置,不受执行脚本的服务器本地区域设置影响,可稳定识别Jan、Feb这类英文月份缩写的日期格式
  • 时间值不通过字符串拼接生成,而是先取解析后日期的零点值,通过AddHours/AddMinutes/AddSeconds方法累加得到标准datetime类型的23:59:59时间点,完全规避字符串格式识别错误
  • AD查询过滤器改用字符串格式传参,兼容性优于原脚本块写法;新增账号不存在的分支判断,遇到异常数据不会导致整个脚本终止
  • 按该逻辑设置后,员工在最后工作日全天可正常登录账号,时间到达当天23:59:59后账号才会触发过期机制,完全匹配业务要求

内容的提问来源于stack exchange,提问作者Gavin Eldred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:09:21