Force Outlook Programmatic Access to Enabled via Powershell
A simple script which sets the user specific registry values for enabling programmatic access in Outlook.
Please ensure that you have an up-to-date antivirus installed if you plan to use this, as it weakens security in the Outlook client and is not typically recommended.
The registry keys/values below have worked well consistently on Windows 10 Multi-User (Windows Virtual Desktop) running Microsoft Office 365 Pro Plus.
$userHives = Get-ChildItem "REGISTRY::HKEY_USERS" | Where-Object name -NotLike "*_Classes"
# Enumerate each User registry hive and create required registry keys/values
ForEach($hive in $userHives){
$usersName = Get-ItemProperty "REGISTRY::$($hive.Name)\Volatile Environment\" -Name "Username" | Select-Object USERNAME
$hivePath = "REGISTRY::$($hive.Name)" # Value will be REGISTRY::HKEY_USERS\(SID)
$securityKey = Test-Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\"
If($securityKey -eq $False){
Write-Host "Creating Security Key under Office\16.0\Outlook" -ForegroundColor Yellow
New-Item "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Force
}
# All values to create under Outlook security in the current user's hive
# You may need to change these variables to suit your version of MSOffice if you use a retail copy older than 2016
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “Adminsecuritymode” -Value 3 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “PromptSimpleMAPISend” -Value 2 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “PromptSimpleMAPINameResolve” -Value 2 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “PromptSimpleMAPIOpenMessage” -Value 2 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “PromptOOMSend” -Value 2 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “promptoomaddressinformationaccess” -Value 2 -PropertyType "DWord" -Force
New-ItemProperty -Path "$($hivePath)\Software\Microsoft\Office\16.0\Outlook\Security\" -Name “promptoomaddressbookaccess” -Value 2 -PropertyType "DWord" -Force
}
# Create required machine Wide keys and values
# You may also need to change these variables to suit your version of MSOffice if you use a retail copy older than 2016
#64-Bit office on 64-Bit Windows Registry Keys
New-Item -path "REGISTRY::HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook" -Name "Security" -ErrorAction SilentlyContinue
New-ItemProperty -Path "REGISTRY::HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Outlook\Security" -Name “ObjectModelGuard” -Value 2 -PropertyType "DWord" -Force -ErrorAction SilentlyContinue
#32Bit Office on 64-bit Windows Registry Keys
New-Item -path "REGISTRY::HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Outlook\Security" -Name "Security" -ErrorAction SilentlyContinue
New-ItemProperty -Path "REGISTRY::HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Outlook\Security" -Name “ObjectModelGuard” -Value 2 -PropertyType "DWord" -Force -ErrorAction SilentlyContinue