首页 > 解决方案 > 使用 powershell、cmd 或 python 自动创建 M365 Outlook 配置文件

问题描述

目标是什么- 在没有客户/用户干预的情况下自动编程 Outlook 配置文件。他们应该只需点击 Outlook 并首次显示电子邮件。最终用户无需设置或配置。

我为一个拥有大约 70 个客户的 MSP 工作。每个客户都使用 Office E3 许可证用于办公应用程序,但他们使用第三方公司进行电子邮件托管(中间/服务器数据)。

这种特殊的差异使得使用基于自动发现和 AD 用户的 smtp 地址的 ZeroConfigExchange 自动设置 Outlook 配置文件变得非常困难。用户正在使用 Azure AD 连接到计算机,但 Azure AD 不知道用户的 smtp 地址是什么,因为他们没有与 microsoft 进行在线交换,而是与 intermedia/serverdata 进行了在线交换。

所以我一直在努力寻找任何方法来根据电子邮件地址、服务器地址和凭据自动创建 Outlook 配置文件;这样当用户第一次到达那里的设备时,它会将 Outlook 配置文件添加到那里的帐户。

我调查的内容:

无论如何尝试 ZeroConfigExchange - 失败 - 它不知道 smtp 信息在哪里创建配置文件。

尝试使用 PowerMapi 的 New-MapiProfile - 失败 - 从这里发现:https ://superuser.com/questions/1141519/configuring-outlook-with-powershell这在 office 2016 或 office 365 上不起作用,因为他们更改了凭据设置

尝试使用 O365 配置工具制作包含电子邮件配置文件的定制版办公应用程序- 失败了 - 显然他们将此功能从较新的 O365 配置工具中移除。这曾经是我的研究所说的旧版本,但现在不再存在了:(我没有足够的图片代表点,所以这里是我的图片的链接) https://i.ibb.co/jftNVg2/ help1.png https://i.ibb.co/8ggz5hg/help2.png

尝试使用我从这里找到的这个 powershell 脚本

$continue = [System.Windows.Forms.MessageBox]::Show("This will delete any outlook profile on your machine. Do you want to continue?", "Continue?", 'YesNo', 'Question')

if ($continue -eq "Yes")
{
    # Create Outlook COM instance
    Add-Type -assembly "Microsoft.Office.Interop.Outlook"
    $Outlook = New-Object -comobject Outlook.Application
    
    $namespace = $outlook.GetNameSpace('MAPI')
    
    $outbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderOutbox)
    $Drafts = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderDrafts)
    
    
    do
    {
        $set = $outbox.Items
        foreach ($item in $set)
        {
            [void]$item.move($Drafts)
        }
        
        Start-Sleep -Seconds 3 | Out-Null
    }
    while ($outbox.items.count -ne 0)
    
    # Quick rest before killing COM
    Start-Sleep -Seconds 3 | Out-Null
    # Kill Outlook COM instance
    $outlook.Quit() | Out-Null
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($outlook) | Out-Null
    
    
    if (Get-Process outlook)
    {
        Get-Process outlook | Stop-Process | Out-Null
    }
    
        
    
    if (Test-Path "$Env:appdata\Microsoft\Outlook\")
    {
        Try
        {
            $void = Remove-Item "$Env:appdata\Microsoft\Outlook\" -force -recurse | Out-Null
        }
        Catch
        {
            [void][System.Windows.Forms.MessageBox]::Show("A file was still in use, try again.", "Information", 'OK', 'Error')
        }
        
    }
    
    
    if (Test-Path HKCU:\Software\Microsoft\Office\16.0\Outlook)
    {
        
        #New-ItemProperty -Path HKCU:\Software\Microsoft\Office\16.0\Outlook\AutoDiscover -Name ZeroConfigExchange -Value 1 -PropertyType DWORD -Force
        
        Remove-Item "HKCU:\Software\Microsoft\Office\16.0\Outlook\Profiles\*" -Recurse -Force | Out-Null
        
        Remove-ItemProperty -Path HKCU:\Software\Microsoft\Office\16.0\Outlook\Setup\ -name First-Run | Out-Null
        
        Start-Process 'C:\Program Files (x86)\Microsoft Office\root\Office16\outlook.exe' | Out-Null
        
    }
    
    else
    {
        #do nothing
    }
    
}
else
{
    [void][System.Windows.Forms.MessageBox]::Show("Nothing was done", "Information", 'OK', 'Information')
    
}

这能够显示电子邮件设置的提示,但无论如何要在这个 powershell 脚本中包含它?

我还从她的电子版中尝试了一点 mfcmapi 应用程序: https ://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/how-to-create-an-outlook-profile-使用-mfcmapi

但是我只是按照微软的文档和研究随机错误并没有真正让我走远。看起来好像 mfcmapi 完全坏了。

我也在这里问了这个问题:https ://superuser.com/questions/1640825/autoconfigure-m365-outlook-profile昨天但我在这个线程中添加了更多我的故障排除方法。我还将向 Microsoft 提出支持请求,看看是否有任何想法。

如果我为其他人找到一个好的答案,我会让每个人都知道。

感谢您的时间,

标签: azurepowershellemailoutlook

解决方案


您还可以尝试ProfMan库(免责声明:我是它的作者) - 它可以很容易地用于为 Office 365 邮箱预先创建 Outlook 配置文件 - 请参阅https://www.dimastr.com/redemption/profman_examples.htm# ROH_Profile_Outlook2016


推荐阅读