如何在Get-ADUser命令中转换Double类型的生日属性extensionAttribute1
在Get-ADUser命令中直接转换Double类型的生日属性
嘿,这个需求我刚好处理过,咱们可以用PowerShell的计算属性直接在命令流水线里完成日期转换,不用额外写循环处理结果,既简洁又高效。
完整命令示例
Get-ADUser -Filter {(extensionAttribute4 -like "Aktiv") -and (Enabled -eq $true)} ` -SearchBase "OU=*****,OU=*****,OU=*****,DC=*****,DC=****" ` -Properties name, mail, extensionAttribute1 | Select-Object name, mail, @{ Name = 'Birthday' Expression = { # 先判断属性是否有值,避免空值报错 if ($null -ne $_.extensionAttribute1) { # 替换这里的$baseDate为你实际使用的基准日期(比如你之前代码里的$date变量值) $baseDate = [DateTime]"1900-01-01" $baseDate.AddDays($_.extensionAttribute1).ToString("dd-MM-yyyy") } # 如果属性为空,这里会默认返回$null,也可以改成"未设置"之类的提示文本 } }
关键部分解释
精简Properties参数:
别用-Properties *,只指定你需要的属性(name, mail, extensionAttribute1),这样能减少AD查询的负载,加快命令执行速度。计算属性的用法:
在Select-Object里通过@{Name='属性名'; Expression={脚本块}}定义自定义属性:Name是最终输出里的列名(这里叫Birthday,你可以改成自己喜欢的名字)Expression里的脚本块负责完成转换逻辑:- 先判断
extensionAttribute1是否不为空,防止空值调用AddDays时报错 - 代入你的基准日期
$baseDate,调用AddDays方法加上存储的天数,最后格式化为dd-MM-yyyy的字符串
- 先判断
额外优化方案(如果是OLE自动化日期)
如果你的extensionAttribute1存储的是OLE自动化日期(比如Excel常用的Double类型日期),可以直接用PowerShell内置的FromOADate方法,不用手动指定基准日期,更准确:
@{ Name = 'Birthday' Expression = { if ($null -ne $_.extensionAttribute1) { [DateTime]::FromOADate($_.extensionAttribute1).ToString("dd-MM-yyyy") } } }
这样执行命令后,就能直接得到已经转换好格式的生日数据啦!
内容的提问来源于stack exchange,提问作者TBoy3
相关产品推荐
相关产品推荐

