在没有用户登录的情况下使用 powershell 登录 Outlook

Logging into Outlook using powershell with no user logged on

我想知道是否可以创建一个 powershell 脚本来登录到特定的 outlook 邮箱,然后将脚本添加到计划任务中,这样用户就不必登录了。

是的,您可以通过编程方式登录到特定的用户配置文件。命名空间 class 的 Logon 方法将用户登录到 MAPI,获得 MAPI 会话。

请注意,Microsoft 目前不建议也不支持从任何无人值守的非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务),因为当 Office 在此环境中为 运行 时,Office 可能会表现出不稳定的行为 and/or 死锁。

如果您正在构建 运行 在服务器端上下文中的解决方案,您应该尝试使用已针对无人值守执行安全设置的组件。或者,您应该尝试找到至少允许 运行 客户端部分代码的替代方案。如果您从服务器端解决方案使用 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。您可以在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。

相反,您可以考虑使用构建 Outlook 的低级别 API - 扩展 MAPI。或者在 API.

周围使用任何第三方包装器

如果您需要打开任意Exchange邮箱,您可以

  1. 使用 Outlook 对象模型(不能在服务中使用,例如调度程序)登录到预定义的配置文件 (Namespace.Logon) 并调用 Namespace.GetSharedDefaultFolder。如果邮箱集始终相同,您可以将这些静态邮箱添加到配置文件(将它们作为委托邮箱打开)并使用 Namespace.Stores 集合以编程方式访问它们。同样,不应在 service/scheduler.

    中使用 Outlook
  2. Exchange Web Services - 它是基于 HTTP 的,因此您可以从服务中使用它

  3. Graph - 与 EWS 一样,它是基于 HTTP 的,因此您可以从服务中使用它

  4. Extended MAPI(仅限 C++ 或 Delphi)。本机 API 由 Outlook 本身使用。它可以在服务中使用。

  5. Redemption (I am its author - it wraps Extended MAPI and can be used in any language from a service). It lets you dynamically log to an Exchange mailbox using RDOSession.LogonExchangeMailbox / LogonExchangeHostedMailbox(不需要现有配置文件)。其他邮箱可以使用RDOSession.GetSharedMailbox.

    打开