PowerShell调用ConvertTo-Json导出AD用户数据日期格式异常问询
问题原因分析
- 该差异由两台服务器上的PowerShell版本不一致导致
ConvertTo-Jsoncmdlet 在PowerShell 5.1及更早版本中,默认会将.NET DateTime类型的对象序列化为ASP.NET AJAX风格的/Date(时间戳)/格式;而PowerShell 7及更高版本中,默认将日期序列化为可读性更高的ISO 8601格式(例如2019-09-17T15:53:25+08:00)- 额外注意你的代码存在变量名笔误:你定义的属性数组变量名为
$adusers,但调用Get-ADUser时传的参数是$aduser,少了末尾的s,会导致实际没有指定拉取自定义属性,只能拿到AD用户的默认属性集,属于潜在问题点
解决办法
- 首先确认两台服务器的PowerShell版本,执行命令
$PSVersionTable.PSVersion即可查看 - 方案1:在出问题的服务器上安装PowerShell 7+版本,原有代码无需修改即可输出标准格式的日期
- 方案2:不升级PowerShell的前提下,在选择属性时手动将日期类型转换为字符串格式,示例代码:
$adusers = @( "Name","SamAccountName","GivenName","Surname","UserAccountControl", @{Name = "WhenCreated"; Expression = { $_.WhenCreated.ToString("yyyy-MM-dd HH:mm:ss") }}, @{Name = "lastLogonDate"; Expression = { $_.lastLogonDate.ToString("yyyy-MM-dd HH:mm:ss") }} ) $users = Get-ADUser -Filter * -Properties $adusers $users | Select-Object $adusers | ConvertTo-Json | Out-File "test.JSON"
- 方案3:对序列化后的JSON字符串做正则替换,批量转换日期格式,适合不想修改属性定义的场景
内容的提问来源于stack exchange,提问作者neo
相关产品推荐
相关产品推荐

