从 C# Web API 方法中创建 Office365 邮箱

Create an Office365 mailbox from within C# Web API method

上下文

我有一个由 ASP.NET MVC 应用程序调用的 ASP.NET Web API 应用程序。

在 Web API 中,我有一个方法需要创建 Office365 邮箱等(创建文件夹、创建联系人、创建签名等...)

该邮箱的创建实际上隐藏了几个需要按特定顺序发生的步骤:

  1. 在本地 Active Directory 中创建用户(return 正确或 假)。
  2. 强制AD Connect在本地AD和 Azure AD 因为默认有 30 分钟的延迟,我们等不及了 因为,因此我们需要强制同步 (return void).
  3. 验证Office365账户是否存在(return真或 假)。
  4. 验证我们是否仍有可用的 Office365 许可证分配给 那个用户。

(NOTE: if not enough licenses, an email will be sent to purchase more licenses...)

  1. 为该用户分配 Office365 许可证。

(NOTE: I believe the action of assigning a license to a user actually creates the mailbox...correct me if I’m wrong)

  1. 在该用户的邮箱下创建几个文件夹(return 无效)。
  2. 创建两个新联系人(return 无效)。
  3. 创建签名(return无效)。

问题

我对一些事情有点困惑...首先,其中一些任务(不是全部)可以通过使用 Microsoft Graph 来完成,而其他任务根本不能因为 Graph 不支持它(还)。

其次,我可以通过使用一些 PowerShell cmdlets 来完成其中的一些任务(例如:强制 AD Connect 同步)。事实上,我确信上面的整个步骤可以使用多个 cmdlets 来实现(或者简单地组合在一个大的 PowerShell 脚本中)。

第三,我正在抓住救命稻草,想知道解决这个问题的最佳方法是什么。

例如,考虑到我处于 HttpRequest 的上下文中,我的 Web API 方法是否应该混合使用一些 PowerShell cmdlets 和一些 Microsoft Graph

我应该混合使用两者吗?还是不行?

我是否应该找到所有 cmdlets,将它们按顺序放在一个大 PS1 文件中,然后从我的 Web [=89] 中简单地执行那个大 PS1 文件=] 方法?

我是否应该找到隐藏在每个 cmdlets 中的所有 Web API 并改用这些 Web API 调用?

我似乎在每个方面都找到了一些优点和缺点,但无法确定什么是最好的。

我担心如果我直接从我的 C# 代码中尝试 运行 cmdlets 如果 cmdlets 之一失败或抛出异常,那么如何处理?同样,如果我将所有内容都放在一个大文件中...

不幸的是,我的问题似乎多于答案,也许有人可以帮助我阐明这一点:-)

此致

PS:虽然也许更好的解决方案是将 Azure Functions 与某种队列一起使用,但不幸的是,我对 Azure Functions 不够熟悉,也没有时间实现更好的方法.如果可能的话,我想坚持在 Web API 方法中实现这一点。

据我了解,Microsoft Graph只允许我们操作Office 365等微软云资源

无法使用它或其他 REST 服务来强制 Azure AD 连接同步从本地到云的更改(Start-ADSyncSyncCycle -PolicyType Delta)。我不想将业务逻辑混合到不同的地方(C# 和 Powershell 代码),而是希望将其保存在同一个地方(在这种情况下为 PowerShell 脚本)以便于维护。我们需要在 PowerShell 脚本中编写 exception/error 处理。

希望对您有所帮助。