最近公司一个部门改组,所有人的主邮件都需要改成新的后缀。我们使用的是Office365,用户信息都是通过DirSync同步本地的AD到云上,因此不能直接使用Exchange的命令修改,而需要在本地的AD上改完之后,再同步到Azure AD上。
基本思路,修改用户和组的proxyaddresses参数,这个就是一大串字符串;大写的SMTP表示主地址,小写的代表别名。 修改之后同步的O365就行了。
这些用户的新的邮件地址我之前已经通过以下的方式添加为别名了,因此只需要在指定时间和现在的主地址交换一下就行了。 这些改动都可以通过 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,如需转载请自行联系原作者