【问题标题】:Enabling Exchange Online SMTP Client Authentication with Powershell使用 Powershell 启用 Exchange Online SMTP 客户端身份验证
【发布时间】:2020-12-28 20:57:03
【问题描述】:

我正在尝试通过 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 个帐户更改此设置,但在一两周内,大约 4000 个帐户将与 AzureAD 同步,因此 Exchange Online。到目前为止,我还没有收到同步帐户的公司的答复,是否可以在同步发生时设置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'。

【问题讨论】:

    标签: powershell authentication exchange-server smtpclient


    【解决方案1】:

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

    Get-TransportConfig
    

    然后检查值。如果设置为“False”,则 SmtpClientAuthenticationDisabled 为 $null 值的所有用户都将具有默认设置“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
    

    【讨论】:

    • 感谢您的输入,我将尝试将值设置为 $null。但基于此链接:answers.microsoft.com/en-us/msoffice/forum/all/…(Timme B81s 于 6 月 26 日回答 - 第 2 页)我假设需要将全局值设置为 $false,并将每个用户的值设置为 $false。我知道有一个全局设置,但由于即使没有进行任何更改它也不起作用,我从上面的帖子中获取信息并尝试为所有用户设置它。
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2019-01-26
    • 2021-10-09
    • 2020-06-24
    • 2021-12-18
    • 2012-01-10
    相关资源
    最近更新 更多