Perhaps you’ve changed SharePoint administrators or a site owner or two recently. Where are the SharePoint site Access Requests they were receiving now going?
This post covers two PowerShell methods of updating the email address used across all sites in bulk:
- Replace the email address used on ALL sites, no exceptions (reset all requests throughout the web app to be sent to one address)
- Change all instances of a specific address to a replacement across ALL sites (i.e. replace the former site owner’s address used in 12 sites’ Access Request Settings with the new site owner’s address)
The second method is particularly nice because it eliminates any guesswork involved in wondering where the former admin/owner may have been listed as the recipient.
Replace the email address used on ALL sites
To modify the email address used for all SharePoint sites and subsites in a web app, run the PowerShell script below from a SharePoint server. You’ll need to replace the $webapp and $requestemail values at the top.
Caution: This action cannot be undone. It replaces the Access Request email on all sites and subsites.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$webapp = Get-SPWebApplication https://sharepoint.contoso.com
$requestemail = "new-request-recipient@demo.com"
foreach($site in $webapp.Sites)
{
foreach($web in $site.AllWebs)
{
$url = $web.url
Write-host "Checking "$url
if (!$web.HasUniquePerm)
{
Write-Host "Site inherits Access Request settings from parent." -ForegroundColor Yellow
}
else
{
if($web.RequestAccessEnabled)
{
Write-Host "Site utilizes Access Requests."
$web.RequestAccessEmail = $requestemail
$web.Update()
Write-Host "Email changed to " $requestemail -ForegroundColor Green
}
else
{
Write-Host "Site is not utilizing Access Requests." -ForegroundColor Yellow
}
} }
}
Replace all instances of a specific user across all sites in the web app
Perhaps a particular individual left their site owner/admin role and you just want to replace any instance of THAT user in Access Request settings throughout the web app. In that case use the following script instead (updating the three parameters at the top, $webapp, $oldrequestemail, and $newrequestemail):
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$webapp = Get-SPWebApplication https://sharepoint.contoso.com
$oldrequestemail = "old-request-email@contoso.com"
$newrequestemail = "new-request-email@contoso.com"
foreach($site in $webapp.Sites)
{
foreach($web in $site.AllWebs)
{
$url = $web.url
Write-host "Checking "$url
if (!$web.HasUniquePerm)
{
Write-Host "Site inherits Access Request settings from parent." -ForegroundColor Yellow
}
else
{
if($web.RequestAccessEnabled)
{
if($web.RequestAccessEmail -eq $oldrequestemail)
{
Write-Host "Site utilizes Access Requests sent to old email ("$web.RequestAccessEmail")." -ForegroundColor Red
$web.RequestAccessEmail = $newrequestemail
$web.Update()
Write-Host "Email changed to" $newrequestemail -ForegroundColor Green
}
else
{
Write-Host "Email ("$web.RequestAccessEmail") does not match old email address. No change made." -ForegroundColor Yellow
}}
else
{
Write-Host "Site is not utilizing Access Requests." -ForegroundColor Yellow
}
}
}
}
Note: If you’ve changed the Access Request recipient and the new person is receiving a “Sorry, this site hasn’t been shared with you” error when attempting to approve requests, check out this post for help.
Credit and gratitude to Ketak Bhalsing and his post on bulk-updating for pointing me in the right direction on this one.