使用Powershell启用Exchange Online SMTP客户端身份验证

问题描述

我正在尝试通过PowerShell在Exchange Online中启用身份验证SMTP。 我的尝试取得了半成功。

$Users = Get-CASMailBox -ResultSize unlimited
$Users | where {$_.SmtpClientAuthenticationdisabled -eq $true} | Set-CASMailBox -SmtpClientAuthenticationdisabled $False

这导致大约75%的用户激活了SMTP身份验证。但奇怪的是,并非所有人。

$Users = Get-CASMailBox -ResultSize unlimited
$Users | where {$_.SmtpClientAuthenticationdisabled -eq $true -or $null -or ""} | Set-CASMailBox -SmtpClientAuthenticationdisabled $False

显示相同的结果。 一样:

$Users = Get-CASMailBox -ResultSize unlimited
$Users | where {$_.ImapEnabled -eq $true} | Set-CASMailBox -SmtpClientAuthenticationdisabled $False

显然,这与SmtpClientAuthenticationdisabled的状态无关,因为我尝试了所有可能的状态并将ImapEnabled -eq $true用作条件,每个用户$true

我刚刚开始使用PowerShell,并且仅具有一些基本的编程知识。现在必须为大约80个帐户更改此设置,但是在一两周内将与AzureAD并因此与Exchange Online同步大约4000个帐户。到目前为止,我还没有收到公司是否同步过帐户的答复,是否可以在发生同步时设置SmtpClientAuthenticationdisabled的状态。我希望自己必须自己做。

所有用户都有一个有效的Office 365许可证和一个有效的Exchange Online计划。

有人对为什么只有大多数但并非所有用户都接受此设置有一些见识吗?

编辑:
尝试执行建议的脚本或尝试执行自己的命令时,遇到了“ $ user”返回“ $ null”的问题,我不理解。

Setting SmtpClientAuthenticationdisabled for  Failed,error: Cannot bind argument to parameter 'Identity' because it is null.

当我仅执行此操作时也会发生这种情况:

$Users = Get-CASMailBox -ResultSize Unlimited
foreach($user in $users) {Write-Host "$($user.displayName)"}

它什么也不返回。
我认为有些根本不了解的东西。
如果仅列出'$ users'的内容,PowerShell将返回具有相关设置(例如'SmtpClientAuthenticationdisabled')的所有用户的列表。

解决方法

如果您希望整个组织使用相同的设置,则应保留用户$ null的值。而是设置TransportConfig。

Get-TransportConfig

然后检查该值。如果将其设置为“ False”,则SmtpClientAuthenticationDisabled值为$ null的所有用户的默认设置为“ False”。

如果设置为“ True”,则改为“ False”:

Set-TransportConfig -SmtpClientAuthenticationDisabled $false

要回答您的原始问题,即为什么用户未正确更新。我认为这与“ SmtpClientAuthenticationDisabled”首先不是可过滤属性有关。因此,您将始终不得不查询您的完整数据集,这不是很好。

您可以执行以下操作来检查并查看实际发生的情况:

$Users = Get-CASMailbox -ResultSize Unlimited
foreach($user in $Users){
    if($user.SmtpClientAuthenticationDisabled -eq $null -or $user.SmtpClientAuthenticationDisabled -eq $true){
        try{
            Set-CASMailbox -Identity $user.ExchangeObjectId.guid -SmtpClientAuthenticationDisabled $false -ErrorAction Stop
            Write-Host "$($user.DisplayName) succesfully set to correct state" -ForegroundColor Green
        }catch{
            Write-Host "Setting SmtpClientAuthenticationDisabled for $($user.DisplayName) failed,error: $_" -ForegroundColor Red
        }
    }else{
        Write-Host "$($user.DisplayName) already has the correct state: $($user.SmtpClientAuthenticationDisabled)" -ForegroundColor Green
    }
}

但是我个人将上面的脚本更改为使用它来将所有值设置为$ null:

Set-CASMailbox -Identity $user.ExchangeObjectId.guid -SmtpClientAuthenticationDisabled $null -ErrorAction Stop