windows - 使用 Outlooks COM 类组件仅在管理员权限下失败

标签 windows powershell outlook com uac

我有一个查询当前 Outlook session 的 PowerShell 脚本。

仅在未提升的 PowerShell 窗口中运行它会像预期的那样工作,但是当我在提升的提示中时它会失败,如下所示:

“正常” session :

PS> New-Object -Com Outlook.Application


Application        : System.__ComObject
Class              : 0
Session            : System.__ComObject
Parent             :
Assistant          :
Name               : Outlook
Version            : 15.0.0.4903
COMAddIns          : System.__ComObject
Explorers          : System.__ComObject
Inspectors         : System.__ComObject
LanguageSettings   : System.__ComObject
ProductCode        : {90150000-000F-0000-0000-0000000FF1CE}
AnswerWizard       :
FeatureInstall     : 1
Reminders          : System.__ComObject
DefaultProfileName : Outlook
IsTrusted          : False
Assistance         : System.__ComObject
TimeZones          : System.__ComObject
PickerDialog       : System.__ComObject

高架:

PS> New-Object -Com Outlook.Application
New-Object : Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed
due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005
(CO_E_SERVER_EXEC_FAILURE)).
At line:1 char:1
+ New-Object -Com Outlook.Application
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [New-Object], COMException
    + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand

Elevation 使用相同的用户帐户,该帐户位于管理员组中。为什么会这样?以及如何解决?据我所知,未提升的应用程序不允许直接与提升的应用程序通信,但反过来应该可行,不是吗?我还尝试以管理员身份启动 Outlook,但正如预期的那样,这没有任何区别。

编辑:

C:/WINDOWS/system32> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14393.693
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.693
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

它是 Win 10 上的 PoSh 5 和 Office 2013 家庭和企业

最佳答案

感谢@Lieven帮助我研究这个问题。如果有人过来并找到解决方案,我想保持开放状态。正如 @Lieven 所述以及对我自己的一些持续研究,对此没有“解决方案”:

Outlook 和 PowerShell 可以通过共享内存同时使用同一个 Outlook session 。由于具有不同提升级别的进程不能共享内存(需要引用),第二个进程(在我的例子中是提升的 PowerShell)必须自己打开 PST(一个新的 outlook session ),它失败了,因为它是由第一个独占打开的(在我的例子中是未提升的 Outlook)。

我的解决方法是创建一个低级进程来保持 Outlook session 和 providing a pipeline用于连接更高级别的进程(以及相同级别)。反之亦然,因为不允许未提升的进程连接到提升的管道。

这对我有用,因为从 PowerShell 使用 Outlook session 执行的任务非常基础。然而,它仍然是一种解决方法。

关于windows - 使用 Outlooks COM 类组件仅在管理员权限下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42746487/

相关文章:

javascript - 对所有用户使用 Office 365 身份验证

C++ Makefile 找不到文件

c# - 有人可以破译 timeGetTime() 或 QueryPerformanceCounter/QueryPerformanceFrequency 是否具有较低的开销或/和准确性?

c# - 我可以指定一个 dll 以在 Powershell 中使用 New-Object 吗?

c# - Base 64 编码图像通过电子邮件发送 ASP.NET

html - GIF 不会在 Outlook 中加载第一帧

php - exec 在 window server 2008 php 上不起作用

windows - 在 cmd 上使用 Cygwin 命令进行彩色输出

windows - 如何将多个 zip 解压缩到一个文件夹中,而不使用 zip 名称创建单独的文件夹?电源外壳

powershell - 在Powershell中删除关闭按钮$ host.ui.PromptForCredential