首页 > 程序开发 > 综合编程 > 其他综合 >

PowerShell 替换 Office365 用户主邮件地址

2017-04-12

PowerShell 替换 Office365 用户主邮件地址:最近公司一个部门改组,所有人的主邮件都需要改成新的后缀。我们使用的是Office365。

PowerShell 替换 Office365 用户主邮件地址:最近公司一个部门改组,所有人的主邮件都需要改成新的后缀。我们使用的是Office365,用户信息都是通过DirSync同步本地的AD到云上,因此不能直接使用Exchange的命令修改,而需要在本地的AD上改完之后,再同步到Azure AD上。

基本思路,修改用户和组的proxyaddresses参数,这个就是一大串字符串;大写的SMTP表示主地址,小写的代表别名。 修改之后同步的O365就行了。

技术分享

这些用户的新的邮件地址我之前已经通过以下的方式添加为别名了,因此只需要在指定时间和现在的主地址交换一下就行了。 这些改动都可以通过 ADSI Edit的界面来查看属性。

set-aduseruser-add@{proxyaddresses="smtp:XXXXXX"}

交换的代码如下

#首先我得获取一个名单,这个名单一部分是现有AD里面的,还有一部分是通过Excel发给我的

$result=@()
$users=get-aduser-Filter{proxyaddresses-like"*old.com.au*"}-Propertiesproxyaddresses-SearchBase"ou=old,ou=melbourne,dc=test,dc=com,dc=au"
foreach($userin$users){
foreach($addressin$user.proxyAddresses)
{
if($address-like"*@old.com.au*"){

$rappaddress=$address.Substring(5)
break;

}

}
$temp=[pscustomobject]@{"FullName"=$user.Name;"CurrentEmail"=$rappaddress}
$result+=$temp
}
#$result
$a=import-csvC:\temp\newuserList.csv|select"FullName","CurrentEmail"
$oo=$result+$a


#获取名单以后,对于名单当前的用户我希望获取他们的主邮件地址,于是写了个function

functionGet-PrimarySMTP(){
[CmdletBinding()]

Param
(
#Param1helpdescription
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]
$users
)
$pp=$null
$pp=@{‘name‘=$null;‘primarysmtp‘=$null}
$obj=New-Object-TypeNamepsobject-Property$pp

$result=@()
foreach($userin$users){
$info=get-aduser-Filter{name-eq$user}-Propertiesproxyaddresses
$primarySMTPAddress=""
foreach($addressin$info.proxyAddresses)
{
if(($address.Length-gt5)-and($address.SubString(0,5)-ceq‘SMTP:‘))
{
$primarySMTPAddress=$address.SubString(5)

break
}
}
$objtemp=$obj|select*
$objtemp.name=$info.Name
$objtemp.primarysmtp=$primarySMTPAddress
$result+=$objtemp
}
$result
}

#执行看看当前用户的主SMTP地址
Get-PrimarySMTP-users$users


#对于每一个用户的每一个地址进行循环,如果是大写的那就变成小写,如果小写的刚好是我需要的那个,那就改成大写

$users=$oo|sort"fullName"|select-ExpandProperty"FullName"

foreach($userin$users){
$info=get-aduser-Filter{name-eq$user}-Propertiesproxyaddresses
$filter="smtp:"+$info.GivenName+"."+$info.Surname+"@new.com"
$new=@()
foreach($addressin$info.proxyaddresses){
$temp=$address
if($address-clike"SMTP*"){
$temp=$address.ToLower()
}
if($address-like$filter){
$temp=$address.Substring(0,4).toupper()+$address.Substring(4).tolower()
}
$new+=$temp
}
write-host"---------------------------"-ForegroundColorCyan
$new
set-aduser$info.SamAccountName-Replace@{proxyaddresses=$new}-confirm
}

#然后同步一下DC
repadmin/syncallsyddc01dc=omnicom,dc=com,dc=au/d/e/a

#再看看新的的SMTP主地址
Get-PrimarySMTP-users$users

#同步到O365
import-moduledirsync
Start-OnlineCoexistenceSync

#通过AzureAD模块查询O365的邮箱看看是否已经更新了
$users|get-mailbox|selectname,primarysmtpaddress
相关文章
最新文章
热点推荐