使用PowerShell更新AD用户proxyAddresses属性异常咨询
异常产生原因
- 核心错误为属性调用错位:你在
foreach-object循环内已经通过$alias=$_.mail.Split("@")[0]定义了本地变量存储邮箱前缀,但在Set-ADUser的拼接逻辑中错误使用了$_.alias。AD用户对象无原生alias属性,该值为空,因此最终生成的proxy地址缺失前缀部分,仅显示smtp:@domain.onmicrosoft.com。 - 次要可优化问题:直接使用
-match匹配多值属性ProxyAddresses可能因正则特殊字符、大小写差异(主地址为大写SMTP前缀)出现误判;-Properties *会拉取所有AD用户属性,执行效率极低。
修复方案
修改拼接逻辑的属性调用,同时可优化脚本的匹配逻辑和属性拉取规则,修复后完整脚本如下:
$proxydomain = "@domain.onmicrosoft.com" # 仅拉取需要的属性,提升执行效率 Get-ADUser -Filter {(emailaddress -like "*@contoso.com" -and Enabled -eq $true -and sAMAccountName -like "TYU*")} -SearchBase "OU=IT,DC=contoso,DC=local" -SearchScope Subtree -Properties mail,ProxyAddresses,displayname,SamAccountName | foreach-object { $alias = $_.mail.Split("@")[0] $targetProxy = "smtp:" + $alias + $proxydomain # 改用正则转义的匹配规则,避免特殊字符导致的误判 if ($_.Proxyaddresses -join ";" -match [regex]::Escape($targetProxy)) { Write-Host "Result: ProxyAddresses value already exists for $($_.displayname); No action taken." } else { # 调用自定义的$alias变量而非不存在的$_.alias Set-ADUser -Identity $_.SamAccountName -Add @{proxyAddresses = $targetProxy} Write-Host "Result: Added proxyAddresses value to Account" } }
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

