PowerShell中无法将UserPrincipalName批量转为小写的问题求助
解决方法
你的脚本错误原因是在Set-ADUser的-replace哈希表中,无法直接引用管道对象的属性方法,PowerShell会把userPrincipalName.ToLower当作普通字符串解析,而非调用AD用户对象的方法。
正确的写法需要通过ForEach-Object遍历每个用户对象,单独处理UPN的小写转换:
Get-ADUser -Filter * -SearchBase "OU=[REDACTED]" -Properties userPrincipalName | ForEach-Object { # 获取当前用户的UPN并转为小写 $lowercaseUPN = $_.userPrincipalName.ToLower() # 将转换后的UPN应用到用户对象 $_ | Set-ADUser -Replace @{userPrincipalName = $lowercaseUPN} }
关键说明
- 用
$_代表当前管道中的AD用户对象,通过$_.userPrincipalName才能正确获取到每个用户的UPN值。 - 添加
-Properties userPrincipalName确保Get-ADUser返回该属性(虽然默认包含,但显式指定更稳妥)。 - 建议先注释掉
Set-ADUser行,用Write-Output $lowercaseUPN测试转换结果,确认无误后再执行修改操作。
内容的提问来源于stack exchange,提问作者AA27CXP
相关产品推荐
相关产品推荐

