微软年初的时候更新了Exchange Online Powershell V2 的版本。因为疫情,我也没关注,毕竟旧版本的脚本还是可以继续运行的。今天刚好有空,测试了一下新版本,发现稳定性和速度果然大幅度提高了,回头就把旧版本的脚本给修改了。

下面看看新版本的使用方式。

安装:

#第一行的目的是把安全协议更改为tls1.2, PS5 默认的tls1.0现在已经不支持了,如果直接使用Install-Module会报错

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 

#下面两行是用来安装或者更新PowerShell Gallery的安装模块
Install-Module -Name PowerShellGet -Force
Update-Module -Name PowerShellGet

#下面两行是用来安装或者更新ExchangeOnlineManagement模块, 旧版本我们还需要登陆进Exchange Admin去下载,新版本直接可以通过PowerShell Gallery安装了

Install-Module -Name ExchangeOnlineManagement
Update-Module -Name ExchangeOnlineManagement

#安装完成之后,导入查看模块信息
Import-Module ExchangeOnlineManagement; Get-Module ExchangeOnlineManagement

安装完成之后,就可以直接连接和运行了。比起第一个版本,2.0的版本优化了很多。旧版本里面,我们是通过New-PSSession的方式来实现连接,但是当我使用MFA的情况下,我只能通过间接调用dll文件来操作,这样子非常的恶心,每次链接都需要输入手机验证码,而且非常不稳定,执行脚本超过20分钟就会导致PowerShell ISE完全死机。

新版本可以直接通过传递credential链接,非常方便,也很稳定。

可以做个对比,下面是1.0的方式

#MFA Authentication, 能用但是很不稳定#
    Import-Module $((Get-ChildItem -Path $($env:LOCALAPPDATA+"\Apps\2.0\") -Filter Microsoft.Exchange.Management.ExoPowershellModule.dll -Recurse ).FullName|?{$_ -notmatch "_none_"}|select -First 1)
    $EXOSession = New-ExoPSSession
    Import-PSSession $EXOSession

#Normal login

    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Credential -Authentication Basic -AllowRedirection
    Import-PSSession $Session
    Connect-MsolService -Credential $credential

下面是2.0的方式,不过我的测试发现,我的MFA管理员账号直接用普通连接方式居然也是工作的

#普通
Connect-ExchangeOnline -Credential $UserCredential -ShowProgress $true

#MFA
Connect-ExchangeOnline -UserPrincipalName $UPN -ShowProgress $true

Exchange Online PowerShell V2 使用_第1张图片

连接效果,感觉利落,对比1.0 时间几乎快了一倍,也没一大堆乱七八糟的警告信息了

Exchange Online PowerShell V2 使用_第2张图片

最后看看相关命令变化

liExchange Online PowerShell V2 使用_第3张图片

咋一看貌似就是命令前面多了一个EXO,比如从 get-mailbox 变成了 get-exoMailbox, 他的内部的参数其实变化了。旧版本的get-mailbox会返回所有的属性,包括大量的空白属性,这些属性可能使用的机会非常稀少,这样子其实浪费了大量的资源和时间。 新版本里面,他定义了一个东西叫做 Propertyset,也就是把各种常见的属性分成大类放到一起,我们返回的时候,指定对应的propertyset,就可以获取对应的信息,而不是一股脑的全部返回。

比如

Exchange Online PowerShell V2 使用_第4张图片

虽然看起来改进不多,但是连接和执行效果的优化,真正使用起来感觉爽快太多了