使用 Outlooks COM class 组件仅在管理员权限下失败
Using Outlooks COM class component fails only with admin privileges
我有一个查询当前 Outlook 会话的 PowerShell 脚本。
运行 它只是在未提升的 PowerShell window 中按预期工作,但是当我处于提升的提示时它失败如下所示:
"normal" 会话:
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 使用相同的用户帐户,该帐户位于 Administrator 组中。为什么会这样?以及如何解决?据我所知,未提升的应用程序不允许直接与提升的应用程序通信,但反过来应该可行,不是吗?我还尝试以管理员身份启动 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 on helping me researching this issue. I wanted to leave this open if someone comes around and finds a solution on this. As stated out by @Lieven 和对我自己的一些持续研究,没有 "solution" 这个:
Outlook 和 PowerShell 可以通过共享内存同时使用同一个 Outlook 会话。由于具有不同提升级别的进程不能共享内存(需要参考),第二个进程(在我的例子中是提升的 PowerShell)必须自己打开 PST(一个新的 outlook 会话),它失败了,因为它是由第一个独占打开的(我的情况是未提升的 Outlook)。
我的解决方法是创建一个低级进程来保持 Outlook 会话,并 providing a pipeline 用于连接更高级别的进程(以及相同级别)。反之亦然,因为未提升的进程不允许连接到提升的管道。
这对我有用,因为从 PowerShell 使用 Outlook 会话执行的任务非常基础。然而,它仍然是一种解决方法。
我有一个查询当前 Outlook 会话的 PowerShell 脚本。
运行 它只是在未提升的 PowerShell window 中按预期工作,但是当我处于提升的提示时它失败如下所示:
"normal" 会话:
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 使用相同的用户帐户,该帐户位于 Administrator 组中。为什么会这样?以及如何解决?据我所知,未提升的应用程序不允许直接与提升的应用程序通信,但反过来应该可行,不是吗?我还尝试以管理员身份启动 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 on helping me researching this issue. I wanted to leave this open if someone comes around and finds a solution on this. As stated out by @Lieven 和对我自己的一些持续研究,没有 "solution" 这个:
Outlook 和 PowerShell 可以通过共享内存同时使用同一个 Outlook 会话。由于具有不同提升级别的进程不能共享内存(需要参考),第二个进程(在我的例子中是提升的 PowerShell)必须自己打开 PST(一个新的 outlook 会话),它失败了,因为它是由第一个独占打开的(我的情况是未提升的 Outlook)。
我的解决方法是创建一个低级进程来保持 Outlook 会话,并 providing a pipeline 用于连接更高级别的进程(以及相同级别)。反之亦然,因为未提升的进程不允许连接到提升的管道。
这对我有用,因为从 PowerShell 使用 Outlook 会话执行的任务非常基础。然而,它仍然是一种解决方法。