PowerShell脚本批量更新特定OU中AD用户邮箱属性问题求助
PowerShell脚本批量更新特定OU中AD用户邮箱属性问题求助
你好,我来帮你分析下这个问题~
你的需求是批量修改特定OU下AD用户的邮箱属性,让邮箱格式变成samaccountname@domain.com,但现在脚本执行后只得到了@domain.com,其实问题不是$($_.samaccountname)的语法错了,而是管道作用域的问题。
直接把Get-ADUser的结果管道到Set-ADUser时,Set-ADUser的-email参数里的$_并没有指向管道传递过来的用户对象——$_在这里处于错误的作用域,没办法正确获取到每个用户的SamAccountName属性,所以最终只拼接了@domain.com。
解决方法很简单,用ForEach-Object来遍历每个用户,这样$_就能正确指代当前循环的AD用户对象了,修改后的脚本如下:
Get-ADUser -Filter * -SearchBase "OU=Test,OU=People,DC=ad,DC=domain,DC=com" | ForEach-Object { Set-ADUser $_ -Email "$($_.SamAccountName)@domain.com" }
如果担心修改出错,你可以先执行下面的命令预览预期的邮箱格式,确认没问题再执行修改:
Get-ADUser -Filter * -SearchBase "OU=Test,OU=People,DC=ad,DC=domain,DC=com" | Select-Object SamAccountName, @{Name="预期邮箱"; Expression={"$($_.SamAccountName)@domain.com"}}
这样就能看到每个用户对应的邮箱是否符合你的预期啦~
备注:内容来源于stack exchange,提问作者Vidarsskjalf
相关产品推荐
相关产品推荐

