使用 Powershell 启用 Exchange Online SMTP 客户端身份验证
Enabling Exchange Online SMTP Client Authentication with Powershell
我正在尝试通过 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' returns '$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)"}
只是returns没什么。
我认为有一些基本的东西我不明白。
如果我只列出 '$users' PowerShell 的内容 returns 一个包含相关设置的所有用户的列表,例如 'SmtpClientAuthenticationDisabled'.
如果您希望整个组织使用相同的设置,您应该将用户的值保留为 $null。而是设置 TransportConfig。
Get-TransportConfig
然后检查值。如果将其设置为 'False',所有具有 SmtpClientAuthenticationDisabled 的 $null-value 的用户将具有默认设置 '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
我正在尝试通过 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' returns '$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)"}
只是returns没什么。
我认为有一些基本的东西我不明白。
如果我只列出 '$users' PowerShell 的内容 returns 一个包含相关设置的所有用户的列表,例如 'SmtpClientAuthenticationDisabled'.
如果您希望整个组织使用相同的设置,您应该将用户的值保留为 $null。而是设置 TransportConfig。
Get-TransportConfig
然后检查值。如果将其设置为 'False',所有具有 SmtpClientAuthenticationDisabled 的 $null-value 的用户将具有默认设置 '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