getactiveObject command fails for windows 8 and windows 10

1

I have the following Powershell code below that i've compiled into an executable (.exe) file and have packaged it into SCCM to push against several 100 users. I have setup the SCCM package to run as "Install as user" and not as an Administrator. The package successfully captures the data for users with Windows 7, but any user that has Windows 8/10 installed fails to capture the data I need.

I did a try/catch statement and get this error - "

Exception calling "GetActiveObject" with "1" argument(s): "Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))"

I'm trying to understand why the same exact code works perfectly on Windows 7 machines, but does not work on Windows 8/10. Is there a fix? I would like to avoid using "New-Object -ComObject 'Outlook.Application'" because i don't want to create a new Outlook process in the background (fear of corrupting user's running Outlook session). I need to run the Powershell code to capture the active running Outlook process. Please help. Thank you

$mail = [Runtime.Interopservices.Marshal]::GetActiveObject('Outlook.Application') 

$name = $mail.Application.DefaultProfileName

output of $name is stored locally to a log text file.

c#
vba
powershell
outlook
sccm
asked on Stack Overflow Apr 27, 2017 by powershellFan83 • edited Jun 23, 2020 by Martijn Pieters

2 Answers

0

Make sure Outlook and your app are running in the same security context - either both apps are running with elevated privileges ("Run As Administrator") or neither app is running as an admin.

answered on Stack Overflow May 9, 2017 by Dmitry Streblechenko • edited Feb 7, 2019 by Dmitry Streblechenko
0

I was experiencing similar symptoms. I don't know if this is your exact problem, but maybe my solution will help someone else who stumbles across this issue.

The following MS KB article mentions that Office applications do not register themselves in the ROT until the application loses focus (which is apparently "behavior by design"). If the application is not registered in the ROT, GetActiveObject will return the error you indicated.

In my case, the script was working reliably on Windows 7, but it only sometimes worked on Windows 8. For some reason, perhaps related to the versions of Office installed, different versions of Internet Explorer (which I used to launch the Office apps) or maybe changes to Windows itself, I experienced different default window focusing behavior on Windows 8. As soon as I manually clicked on the Office app in my Windows 8 tests, the script started working.

To solve the problem, I just inserted a call to focus the Office application window before making the GetActiveObject call, which made the operation completely reliable on Windows 8.

answered on Stack Overflow Jul 12, 2018 by Scott Dudley

User contributions licensed under CC BY-SA 3.0