咨询New-ADUser中-AccountExpirationDate参数的正确格式及使用方法
使用New-ADUser的-AccountExpirationDate参数设置账户过期日期
你提到的03/01/2023 00:00:00格式确实能被PowerShell识别为System.DateTime类型,但为了避免系统区域设置导致的日期/月份歧义,更推荐使用标准化格式,以下是具体规范和实操方法:
一、支持的日期格式规范
PowerShell会自动将符合规则的字符串转换为System.DateTime对象,优先选择这些无歧义的格式:
- ISO 8601标准格式:
yyyy-MM-dd(仅日期)或yyyy-MM-dd HH:mm:ss(日期+时间),比如2023-03-01、2023-03-01 23:59:59,这种格式不受系统区域影响,不会出现格式解读混乱。 - 区域兼容格式:符合当前系统区域设置的日期格式,比如中文系统下的
2023/03/01、2023年3月1日,英文系统下的March 1, 2023等。
二、CSV批量处理的实操方式
- CSV列格式直接兼容的情况
如果CSV的日期列使用上述推荐格式,直接引用列值即可,PowerShell会自动完成类型转换:
Import-Csv .\ADUsers.csv | ForEach-Object { New-ADUser -Name $_.UserName -AccountExpirationDate $_.AccountExpires -SamAccountName $_.SamAccountName ...其他必填参数 }
- CSV格式不兼容的情况
如果CSV里的日期格式无法被自动识别,用[DateTime]::ParseExact()手动指定格式转换:
比如CSV里日期格式为MM/dd/yyyy(如03/01/2023),脚本可写为:
Import-Csv .\ADUsers.csv | ForEach-Object { $expiryDate = [DateTime]::ParseExact($_.AccountExpires, "MM/dd/yyyy", $null) New-ADUser -Name $_.UserName -AccountExpirationDate $expiryDate -SamAccountName $_.SamAccountName ...其他必填参数 }
三、验证日期格式有效性
可先在PowerShell控制台测试字符串是否能正常转换为System.DateTime对象:
# 测试ISO格式 [DateTime]"2023-03-01" # 测试区域格式 [DateTime]"03/01/2023"
若命令返回正确的日期对象且无报错,说明该格式可直接使用。
内容的提问来源于stack exchange,提问作者a3kop
相关产品推荐
相关产品推荐

