Jump to content

Managing Outlook accounts in profile


Chris866
 Share

Recommended Posts

I'm trying to script a way to add and remove accounts to a users Outlook profile.  I _think_ adding can be done by creating PRF files but how can you delete an account without Exchange?

 

We already have in place a web interface where we can say what users should be reading what email accounts, the output of the webpage writes a txt config file.  Currently we use Thunderbird but users are wanting Outlook (for some reason, we don't run Exchange).  In Thunderbird, when it starts, via an autoit script, it checks the webpage config file, looks to see what email accounts the user should be reading, each account has an ID we set in the web php, the script them looks in the users pref.js file for the ID's they should be ready and those that they shouldn't be reading anymore.  The users pref.js is then edited, the lines with the ID they don't need to read are removed, for accounts that need adding, a template segment of pref.js file is copied locally, the ID number is inserted and the file is cat'ed to the users prefs.js.  Thunderbird is then started and displays the email accounts that user should be reading, job done.  This is what I'm trying to reproduce but with Outlook. 

 

Thoughts....

 

thanks.  Chris

Link to comment
Share on other sites

Details about profiles can be found here or here.
Happy reading :)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

  • 2 weeks later...

Unfortunately I have absolutely no idea and didn't find anything related on the web. Best bet seems to be to create a new profile and drop the unneeded account.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

  • 2 months later...

OK, for anyone finding this page who is also looking how to add and remove Outlook accounts without using exchange, here's how you can do it.

 

All of the information is in the registry, it's just a matter of knowing where and what to delete.  To add an account, construct a .prf file and start Outlook with the /importprf option.  In my case I used Autoit to read the txt based config file that was generated from a web page.  The config lines looked like:
 

Quote

90009,cadmin,C Group Secretary,ca@xxxx.cam.ac.uk,CA ,cm214

90010,hrpeople,HR Office,hr@xxxx.cam.ac.uk,HR,cm214

....

 

I created a PRF template file like the one attached - template.txt.  It's the same format as the PRF file that is exported when you run Office setup.exe with the /admin switch.  For the areas in the template that will change for each Outlook account I want to add, I add a string of text that I use _ReplaceStringInFile to replace that string with some proper lines that Outlook will understand when it imports the PRF file.  It seems that you can't start Outlook with more than one /importprf [filename] therefore you need to create on PRF file with all the Outlook accounts and any LDAP settings.  To test the PRF file you need to delete any existing Outlook profiles, this is where the learning starts.  I'm working with Outlook 2010, the registry keys may be different with different versions of Outlook but for 2010, delete the key:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214

 

(cm214 is my Outlook profile name)

Also delete any files in:

C:\Users\cm214\Appdata\Local\Microsoft\Outlook\

 

Now Outlook can be started and configured:

"c:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE" /importprf [path to the edited template file with replaced text]

 

That's the easy bit and well documented on the web.  What doesn't seem to be so well documented is how to remove one or more of your Outlook accounts.  Yes, you can just delete the profile under \Windows Messaging Subsystem\Profiles\ in the registry and remove the .pst files but you then loose all of your Outlook accounts.  The following is what I do and seems to work!

 

For each account you want to delete you need to delete 4 registry keys and change two values in another key.  All the accounts are listed in the registry:

 

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\9375CFF0413111d3B88A00104B2A6676\

 

9375CFF0413111d3B88A00104B2A6676 seems to always be used for Outlook 2010 anyway.  The keys below this look like:

 

00000001

00000002

00000005

00000008

For this text we'll call them 'accountids'.  These accountids are quite meaningless until you look at the key called 'Account Name' within each of the 'accountids' keys.  The value of 'Account Name' is in hex and using the following will show you which account 0000001, 00000002 etc refer to in English:

$outlook_registry_pro_root="HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
$func_username="cm214"
$outlook_registry_pro_key="9375CFF0413111d3B88A00104B2A6676"


For $i = 1 To 100
  $sSubKey = RegEnumKey($outlook_registry_pro_root & "\" & $func_username & "\" & $outlook_registry_pro_key, $i)
  If @error Then ExitLoop
  If $sSubKey <> "" Then
    $prof_regread = RegRead($outlook_registry_pro_root & "\" & $func_username & "\" & $outlook_registry_pro_key & "\" & $sSubKey, "Account Name")
    $prof_regread = StringReplace($prof_regread, "00", "")
    $prof_reg_key = BinaryToString($prof_regread)
    ConsoleWrite ($prof_reg_key & " (" & "\" & $func_username & "\" & $outlook_registry_pro_key & "\" & $sSubKey & ")" & @CRLF)
  EndIf
Next

So, for the account (accountids) you want to delete, look in each 9375CFF0413111d3B88A00104B2A6676\(accountids)\ and look for the value of 'Preferences UID'  This is the name of the another key below 'HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\ ', delete this key.

 

Next, look at the value of 'Service UID' within 9375CFF0413111d3B88A00104B2A6676\(accountids)\.  This too points to another key under 'HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\' but before deleting it, look in this key and note the value of '01023d00'.  This points to another key under '\Windows Messaging Subsystem\Profiles\cm214\', delete this key and then delete the key you read the value of '01023d00' in.  That's three registry keys deleted, the last registry key to delete is 9375CFF0413111d3B88A00104B2A6676\(accountids)\.  Do this for each account you want to delete.

 

We then need to change the value of the key 9375CFF0413111d3B88A00104B2A6676\{ED475418-B0D6-11D2-8C3B-00104B2A6676} and 9375CFF0413111d3B88A00104B2A6676\{ED475420-B0D6-11D2-8C3B-00104B2A6676}.  These are binary values and they contain the values of the 'accountids', 0000001, 00000002 etc.  For each account you delete you also need to delete the value of 'accountids' from the two keys but each value of 'accountids' has to be split into four groups of two values and each of the four groups reversed and put back to one group of eight.  00000001 > 00 00 00 01(split into four groups) > 01000000 (joined together starting with the last pair).  To make it clearer, lets say the value of 'accountids' = 12345678.  Make four groups of two = 12 34 56 78.  Then make one group starting with the last of the pairs = 78563412.  For each account we delete remove this accounts 'accountids' from both {ED475418-B0D6-11D2-8C3B-00104B2A6676} and {ED475420-B0D6-11D2-8C3B-00104B2A6676}.  That completes the registry work.

 

The last thing to do is to remove any files within C:\Users\[username]\Appdata\Local\Microsoft\Outlook.  To work out what files to delete, look for anything with the value of 'Account Name' that we worked out earlier when we found what 'accountids' to delete.  Done, you've now removed an account without blatting all your accounts.

 

For my users they start what they think is the Outlook exe but it's been replaced with my Autoit code that works out what accounts they should be reading as set in the web generated config txt file.  It then works out the accounts that are in the registry.  For any accounts that need adding a new PRF file is created.  Any account they shouldn't be read are removed from the registry.  Lastly Outlook is started with the /importprt [filename] argument.  My new exe can also be passed two variables, 'clean' or 'list'.  Clean will delete the registry below HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\ and remove files in \Appdata\Local\Microsoft\Outlook\.  List will show the readable version of the accounts under \CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\9375CFF0413111d3B88A00104B2A6676\.

 

Hopefully this will help someone who's trying to work out how to remove / delete Outlook accounts.

template.txt

Link to comment
Share on other sites

Thanks for sharing :)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...