今天在公司的生产环境中有个需要用到powershell批量检查office365用户的操作,所以在这边顺便记录的powershell连接office365的过程:

 

在连接之前,需要安装两个工具:1Office 365 Sign-In Assistanthttp://www.microsoft.com/en-us/download/details.aspx?id=28177

2. Office 365Powershell  http://technet.microsoft.com/library/jj151815.aspx


wKioL1SEBvig4zjAAAEYHCQ9GEM776.jpg

wKiom1SEBmfSeJBSAAEX4kY5ERE979.jpg


安装完成之后。使用管理员身份运行windows powershell(若不以管理员身份运行,则后续的命令执行后会报错!)

启动之后,首先确定ps是否配置为运行脚本。输入:Get-ExecutionPolicy

若已配置,则应该如下图显示:

若没有配置,则应该首先配置为运行脚本,输入:Set-ExecutionPolicy RemoteSigned

 

wKioL1SEBxLw85OfAAJvpJ5hOOY893.jpg

 

确定之后,创建ps凭据对象:$credential = Get-Credential

执行之后,则会弹出一个对话框,输入office365的账号名和密码(必须要有全局管理员权限)

点击确定之后,将不会有任何提示。若想确定是否登录成功,可以执行$credential,可以看到类似如下图的返回结果

wKiom1SEBp_Qysg7AAFjqGFFL7o228.jpg

此时,请注意,Get-Credential cmdlet 只创建凭据对象,并不对您进行身份验证,也不验证您提供的用户名和密码是否正确。例如,假设您将用户名错误键入为“eknmyer@litwareinc.onmicrosoft.com”。如果确实如此,则 Get-Credential 将使用该用户名创建凭据对象,并不会检查该用户名是否有效。在您真正使用凭据对象尝试连接到 Office 365 之前,您不会知道自己创建的凭据对象是否真的有效。

下面连接到office365

首先需要导入office365模块

Import-Module MsOnline
输入Get-Module进行查询
 

wKioL1SECZOhsbUXAAJW1UScSKI680.jpg

 

用上面创建的凭据对象连接到office365

Connect-MsolService -Credential $credential

 

连接完成之后,输入Get-MsolDomain 利用返回结果验证是否连接成功

wKioL1SEDOaiO7hxAAOI0QeZ6Xc863.jpg

 

这一步连接成功之后,就可以按照需要连接sharepoint online/lynconline/exchange online

可参考:http://technet.microsoft.com/zh-CN/library/dn568015.aspx

今天因为需要,需要连接到exchange online

创建远程psexchange online的会话

$exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $credential -Authentication "Basic" -AllowRedirection

在这一步执行的时候报了一个错误,后来确定了一下,上条命令中:https://outlook.office365.com的地址为全球版office365exchange online的地址,而我的产品订阅的为世纪互联运营的中国版的office365,所以需要将上述地址替换为:https://partner.outlook.cn

wKiom1SEDHTA42E1AAUtLCwYGkw389.jpg

 

执行之后,导入远程会话:Import-PSSession $exchangeSession

wKiom1SEDJ3xjDmXAAXwyEiubEE929.jpg

若运行正常,则可以看到以下命令

wKioL1SEDhjBictmAAKwTJNKWGc976.jpg


运行以下命令:Get-AcceptedDomain

若返回以下,则表示连接成功,可以进行管理了

wKiom1SEDa3AGv6rAAGdi9BLm0A248.jpg

 

本次需求是已经利用exchange online的管理界面创建了很多通讯组(包含通讯组和动态通讯组),查询某一动态通讯组成员。

例如:查询系统服务部的成员

$DDG = Get-DynamicDistributionGroup 系统服务部

Get-Recipient -RecipientPreviewFilter $DDG.RecipientFilter

PS:第一个命令使用 $DDG 变量存储动态通讯组对象,第二个命令使用 Get-Recipient cmdlet 来列出符合为动态通讯组定义的条件的收件人。

wKioL1SEDm3CgjV9AAFrJrZ1V9o091.jpg

从返回结果中查询到有部分人员并没有包含在系统服务部中,按照规则,应该是部门选项卡为添加具体值,那么在企业中肯定有类似的用户缺少部门选项卡的值,我们首先来查看下哪些用户的部门值为空

wKioL1SEDnuQHvK-AAGTzfsKfSg817.jpg

在网页管理中为缺少该值的用户添加之后,确认,修改完成。