【发布时间】:2017-08-02 10:58:12
【问题描述】:
我有一个查询当前 Outlook 会话的 PowerShell 脚本。
仅在未提升的 PowerShell 窗口中运行它可以像预期的那样工作,但是当我在提升的提示符中时它会失败,如下所示:
“正常”会话:
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 Home & Business
【问题讨论】:
-
如果您以提升会话的形式启动 Outlook,您是否仍会获得与在非提升会话中相同的 Outlook 配置文件负载?
-
是的,保持不变。
-
如果我打开了 Outlook 或者我首先在正常会话中打开了实例,我可以重现您的问题。如果 Outlook 关闭并且没有人通过 COM 连接,我提升的 New-Object 工作得很好。我最有根据的猜测是,您无法使用具有不同高度级别的多个进程连接到 Outlook。至于为什么会这样,老实说,我不知道。
-
使用 procmon,这可能只是对我的 pst 文件的共享违规。如果你也是这种情况,那么这最终与海拔无关。
-
是的,我可以通过这种方式重现它。问题是,如果提升的 PowerShell 持有我无法启动未提升的 Outlook 的对象。 (说另一个版本的 Outlook 已打开) 似乎没有解决方案。令人困惑的是,我可以在相同的海拔高度打开尽可能多的 PoSh 进程而不会遇到麻烦......
标签: windows powershell outlook com uac