#Requires -Version 5.1 <# JbTecWiz Support Centre -- generated fix script Fault : A shared mailbox or delegate access is missing, read-only, or will not send Fix : Fix a mailbox that appears but will not expand Source: https://jbtecwiz.com/support/win-office-shared-mailbox Run as : Outlook, as the affected user Expect : 40 minutes Risk : medium Reversible : yes WHEN THIS IS THE RIGHT FIX "Cannot expand the folder", or folders that are visible but empty. HOW TO UNDO IT Re-tick Download shared folders, or rename the original OST back into place, if the change did not help. This script walks the fix one step at a time and asks before each one. Steps with no command are things you do yourself -- it prints those and waits. Run with -DryRun to print without executing. #> [CmdletBinding()] param( # Print every step and command without running anything. [switch]$DryRun, # Do not ask before each step. Read the script first if you use this. [switch]$Unattended ) $ErrorActionPreference = 'Stop' $script:Failed = 0 # - THIS SCRIPT WILL NOT RUN UNTIL YOU EDIT IT - # The commands below contain values only you can supply. Search the # script for each one, replace it, then delete this block. $script:MustEdit = @( 'example.com' # a placeholder domain ) if ($script:MustEdit.Count) { Write-Host "" Write-Host ' This script needs editing before it can run.' -ForegroundColor Yellow Write-Host ' Replace each of these with a real value:' -ForegroundColor Yellow $script:MustEdit | ForEach-Object { Write-Host (" " + $_) -ForegroundColor Yellow } Write-Host "" Write-Host ' Then delete the $script:MustEdit block near the top.' Write-Host "" exit 2 } function Write-Rule { param([string]$Text) Write-Host '' Write-Host ('-' * 70) -ForegroundColor DarkGray if ($Text) { Write-Host $Text -ForegroundColor Cyan } } function Show-Prose { param([string]$Text, [string]$Colour = "Gray") if (-not $Text) { return } $words = $Text -split "\s+"; $line = " " foreach ($w in $words) { if (($line.Length + $w.Length) -gt 74) { Write-Host $line -ForegroundColor $Colour; $line = " " } $line += "$w " } if ($line.Trim()) { Write-Host $line -ForegroundColor $Colour } } function Invoke-Step { param( [int]$Number, [string]$Do, [string]$Why, [scriptblock]$Command, [switch]$Manual, [string]$Shell = "powershell" ) Write-Rule " Step $Number of 5" Show-Prose $Do "White" if ($Why) { Write-Host ""; Show-Prose $Why "DarkGray" } if ($Manual) { Write-Host '' Write-Host ' -> Do this yourself, then press Enter to carry on.' -ForegroundColor Yellow if (-not $Unattended -and -not $DryRun) { [void](Read-Host) } return } Write-Host '' foreach ($l in ($Command.ToString().Trim() -split "`n")) { Write-Host (" " + $l.Trim()) -ForegroundColor Green } Write-Host '' if ($DryRun) { Write-Host " (dry run -- not executed)" -ForegroundColor DarkGray; return } if (-not $Unattended) { $a = Read-Host " Run this step? [Y]es / [S]kip / [Q]uit" if ($a -match "^[Qq]") { Write-Host " Stopped at your request."; exit 0 } if ($a -match "^[Ss]") { Write-Host " Skipped." -ForegroundColor DarkGray; return } } try { & $Command } catch { $script:Failed++ Write-Host (" Step $Number failed: " + $_.Exception.Message) -ForegroundColor Red Show-Prose "The rest of the fix may depend on this. Read the write-up before carrying on." "Red" if (-not $Unattended) { $c = Read-Host " Carry on anyway? [y/N]" if ($c -notmatch "^[Yy]") { exit 1 } } } } Write-Rule Write-Host ' A shared mailbox or delegate access is missing, read-only, or will not send' -ForegroundColor White Write-Host ' Fix a mailbox that appears but will not expand' -ForegroundColor Cyan Write-Host '' Write-Host ' Risk: medium Reversible 40 minutes' Write-Rule if (-not $Unattended -and -not $DryRun) { $go = Read-Host ' Ready? [y/N]' if ($go -notmatch "^[Yy]") { Write-Host " Nothing was changed."; exit 0 } } Invoke-Step -Number 1 -Do 'Confirm the permission is Full Access on the mailbox itself and not just folder-level permission on the inbox. Folder permissions grant a view of one folder and produce exactly this symptom on everything else.' -Command { Get-MailboxPermission -Identity shared@example.com -User person@example.com | Select-Object AccessRights } Invoke-Step -Number 2 -Do 'Check the cached mode setting for shared folders. File -> Account Settings -> Account Settings -> Change -> "Download shared folders".' -Why 'With this ticked, shared folders come from the local cache; if the cache is damaged the folders appear but cannot be expanded. Unticking it makes Outlook read them from the server directly, which both proves where the problem is and often resolves it outright.' -Manual Invoke-Step -Number 3 -Do 'Untick it, restart Outlook, and test. If the mailbox now opens, the local cache was the problem.' -Manual Invoke-Step -Number 4 -Do 'To clear the cache properly, close Outlook and remove the OST -- it is a cache and is rebuilt from the server.' -Command { Get-ChildItem "$env:LOCALAPPDATA\Microsoft\Outlook" -Filter *.ost | Select-Object FullName, @{n='GB';e={[math]::Round($_.Length/1GB,2)}}, LastWriteTime } Invoke-Step -Number 5 -Do 'Rename rather than delete the OST, start Outlook, and let it rebuild. Delete the old file only once the rebuild is confirmed complete.' -Why 'An OST rebuild on a large mailbox can take hours and saturate the connection. Renaming means you can put the old one back if the rebuild goes wrong, and it costs nothing but disk space until you are sure.' -Manual Write-Rule " Confirm it worked" Show-Prose 'Every folder in the shared mailbox expands and shows its contents.' 'White' Write-Rule if ($script:Failed -gt 0) { Write-Host (" Finished with " + $script:Failed + " failed step(s).") -ForegroundColor Yellow Show-Prose 'Read the full write-up at https://jbtecwiz.com/support/win-office-shared-mailbox' 'Yellow' } else { Write-Host ' Finished.' -ForegroundColor Green } Write-Host '' Show-Prose 'To undo: Re-tick Download shared folders, or rename the original OST back into place, if the change did not help.' 'DarkGray' Write-Rule