Thanks to everyone for doing the research, this had been driving me crazy for years.
I ended up writing a script for it, so hope it helps the next victim:
<#
.SYNOPSIS
Disables Microsoft Office teaching callouts.
.DESCRIPTION
Checks specific registry keys related to Office teaching callouts and sets them to disable the notifications.
.EXAMPLE
Disable-OfficeTeachingCallouts
#>
function Disable-OfficeTeachingCallouts() {
Write-Host "Checking for the infuriating MS Office 'TeachingCallouts' registry keys...SO I CAN KILL THEM WITH FIRE! 🔥🔥🔥"
$registryPath = 'HKCU:\Software\Microsoft\Office\16.0\Common\TeachingCallouts'
$keyName = 'DontShowTeachingCallouts' # This will disable the entire 'callout' feature
$keyExists = Test-Path -Path $registryPath
if ($keyExists) {
$keyValue = Get-ItemProperty -Path $registryPath -Name $keyName -ErrorAction SilentlyContinue
$needsUpdateOrCreate = $false
if ($null -eq $keyValue) {
Write-Host " '$keyName' doesn't exist! 🤬"
$needsUpdateOrCreate = $true
}
elseif ($keyValue.$keyName -ne 1) {
Write-Host " '$keyName' exists, but had a value of $($keyValue.$keyName)! 🤬"
$needsUpdateOrCreate = $true
}
if ($needsUpdateOrCreate) {
Set-ItemProperty -Path $registryPath -Name $keyName -Value 1
Write-Host 'All fixed! Think happy thoughts (and restart your Office apps 💪'
return
}
Write-Host 'Finished, and nothing needed fixing! Breathe easy.... 😎'
}
else {
Write-Host "$registryPath doesn't exist! 🤬"
}
}
This is the old script, which works only the keys that currently exist:
$registryPath = "HKCU:\Software\Microsoft\Office\16.0\Common\TeachingCallouts"
$subKeys = Get-ItemProperty -Path $registryPath
Write-Host "Checking for the infuriating MS Office 'TeachingCallouts' registry keys...SO I CAN KILL THEM WITH FIRE! 🔥🔥🔥"
$foundAny = $false
foreach ($subkey in $subKeys) {
$values = Get-ItemProperty -Path $subKey.PSPath
foreach ($value in $values.PSObject.Properties) {
if ($value. Value -eq 0 -or $value. Value -eq 1) {
$foundAny = $true
Write-Host " Found $($value.Name) with a value of $($value. Value) 🤬"
Set-ItemProperty -Path $subKey.PSPath -Name $value.Name -Value 2 -Type DWord
}
}
if ($foundAny) {
Write-Host "Found some 💩-box, 🤬-damned new ones. But they're gone now... you'll be ok. Think happy thoughts (and restart your Office apps). 💪"
} else {
Write-Host "No values found to change, you can breathe easy fellow traveller. 😎"
}