Powershell无法从命令提示符创建Outlook COM对象

时间:2015-04-21 12:40:51

标签: powershell outlook

我有一个脚本用于从命令提示符通过Microsoft Outlook发送邮件。如果我从PowerShell或ISE控制台内部运行它,这可以正常工作。但是当我尝试从经典的Windows命令提示符(cmd.exe)执行相同操作时,即使具有管理员权限,也无法创建Outlook COM对象。以下是创建COM对象的行:

$objOutLook = New-Object -com Outlook.Application

这是我从cmd.exe(管理权限)调用我的脚本的方式:

  

D:> powershell D:\ MiscBuildTasks.ps1 -sendmail -MailTo'farrukh@MyMail.com'

这是错误日志:

  

New-Object:使用CLSID检索组件的COM类工厂   {0006F03A-0000-0000-C000-000000000046}由于以下原因而失败   错误:80080005服务器执行失败(来自HRESULT的异常:   0x80080005(CO_E_SERVER_EXEC_FAILURE))。   在D:\ MiscBuildTasks.ps1:81 char:12   + $ Outlook = New-Object -ComObject Outlook.Application   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ResourceUnavailable:(:) [New-Object],COMException       + FullyQualifiedErrorId:NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand

如何使用cmd.exe(Windows命令提示符)使其正常工作 感谢

4 个答案:

答案 0 :(得分:8)

CO_E_SERVER_EXEC_FAILURE如果是Outlook,则表示调用应用程序和COM服务器在不同的安全上下文中运行。如果命令提示符以提升的权限运行,请确保Outlook也使用提升的权限启动,或者在执行代码时根本不运行Outlook - 这样Outlook将由您的代码启动,并且将以同样提升的特权。

答案 1 :(得分:3)

Considerations for server-side Automation of Office文章声明如下:

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

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。

Office应用程序在应用程序运行时假定用户身份,即使Automation启动应用程序也是如此。应用程序尝试根据启动应用程序的用户的用户注册表配置单元中的设置初始化工具栏,菜单,选项,打印机和一些加载项。许多服务在没有用户配置文件的帐户下运行(例如SYSTEM帐户或IWAM_ [servername]帐户)。因此,Office可能无法在启动时正确初始化。在这种情况下,Office会在CreateObject函数或CoCreateInstance函数上返回错误。即使可以启动Office应用程序,如果不存在用户配置文件,其他功能也可能无法正常工作。

答案 2 :(得分:3)

我有同样的问题,我发现这是三件事的组合。

  1. 使用正确的权限级别(admin)
  2. 运行
  3. 对outlook和powershell使用相同的arch(32位vs 64位)
  4. 关闭Outlook,因为脚本会打开它。

答案 3 :(得分:0)

如果您的Outlook安装是32位,请确保使用的是32位版本的PowerShell(x86),而不是64位版本。