PowerShell 替换 Office365 用户主邮件地址

简介:

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


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

wKiom1cr2fOyorjPAABZMSh53cU958.png


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

1
set-aduser  user -add @{proxyaddresses= "smtp:XXXXXX" }


交换的代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#首先我得获取一个名单,这个名单一部分是现有AD里面的,还有一部分是通过Excel发给我的
 
$result =@()
$users = get-aduser  - Filter  {proxyaddresses  -like  "*old.com.au*" } -Properties proxyaddresses -SearchBase  "ou=old,ou=melbourne,dc=test,dc=com,dc=au"
foreach $user  in  $users ){
foreach  ( $address  in  $user .proxyAddresses)
{
    if ( $address  -like  "*@old.com.au*" ){
    
    $rappaddress = $address .Substring(5)
    break ;
    
    }
    
}
$temp = [pscustomobject] @{ "Full Name" = $user .Name; "Current Email" = $rappaddress }
$result += $temp
}
#$result
$a = import-csv  C:\temp\newuserList.csv | select  "Full Name" "Current Email"
$oo = $result + $a
 
 
#获取名单以后,对于名单当前的用户 我希望获取他们的主邮件地址,于是写了个function
 
function  Get-PrimarySMTP (){
     [ CmdletBinding ()]
     
     Param
     (
         # Param1 help description
         [ Parameter ( Mandatory = $true ,
                    ValueFromPipelineByPropertyName = $true ,
                    Position =0)]
         [string[]]
         $users
     )
$pp = $null
$pp =@{ 'name' = $null ; 'primarysmtp' = $null }
$obj = New-Object  -TypeName psobject -Property  $pp
  
$result =@()
foreach ( $user  in  $users ){
$info = get-aduser  - Filter  {name  -eq  $user } -Properties proxyaddresses
$primarySMTPAddress  = " "
foreach ($address in $info.proxyAddresses)
{
     if (($address.Length -gt 5) -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 " full Name "|select -ExpandProperty " Full Name "
 
foreach($user in $users){
$info=get-aduser -Filter {name -eq $user} -Properties proxyaddresses
$filter=" smtp: "+$info.GivenName+" . "+$info.Surname+" @new .com "
$new=@()
foreach($address in $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 " ---------------------------" -ForegroundColor Cyan  
$new
set-aduser  $info .SamAccountName  -Replace  @{proxyaddresses= $new } -confirm
}
 
#然后同步一下DC
repadmin /syncall syddc01 dc=omnicom,dc=com,dc=au /d /e /a 
 
#再看看新的的SMTP主地址
Get-PrimarySMTP  -users  $users
 
#同步到O365
import-module  dirsync
Start-OnlineCoexistenceSync
 
#通过Azure AD 模块查询O365的邮箱看看是否已经更新了
$users  get-mailbox  | select name, primarysmtpaddress








本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1770618,如需转载请自行联系原作者

目录
相关文章