Taylohtio/_Scripts/change_site_collection_url/restoreUserEmails/update-emails.ps1

98 lines
1.8 KiB
PowerShell

param(
[Parameter(Mandatory=$true)]
[string]$url,
[Parameter(Mandatory=$true)]
[string]$sourceUrl
)
function Write-File($msg)
{
($msg) | Out-File "log-update-emails.txt" -Append
}
function Write-Info($msg)
{
Write-Host $msg -foregroundcolor green
Write-File $msg
}
function Write-Warn($msg)
{
Write-Host $msg -foregroundcolor yellow
Write-File $msg
}
function ContainsUser($users, $loginName)
{
foreach ($user in $users)
{
if ($user.LoginName.ToLower() -eq $loginName.ToLower())
{
return $true
}
}
return $false
}
function Get-User($web, $userName)
{
if ([System.String]::IsNullOrEmpty($userName))
{
return $null
}
$user = $null
try
{
$user = $web.EnsureUser($userName)
}
catch
{
return $null
}
return $user
}
$users = New-Object System.Collections.ArrayList
$site = Get-SPSite $url
foreach ($user in $site.RootWeb.AllUsers)
{
if ([System.String]::IsNullOrEmpty($user.Email))
{
$users.Add($user) > $null
}
}
foreach ($user in $site.RootWeb.SiteUsers)
{
$contains = ContainsUser $users $user.LoginName
if ([System.String]::IsNullOrEmpty($user.Email) -and (-not $contains))
{
$users.Add($user) > $null
}
}
$sourceSite = Get-SPSite $sourceUrl
$sourceWeb = $sourceSite.RootWeb
foreach ($user in $users)
{
Write-Info($user.LoginName)
$sourceUser = Get-User $sourceWeb $user.LoginName
if ($sourceUser -eq $null)
{
Write-Warn(" User not found on source")
continue
}
if ([System.String]::IsNullOrEmpty($sourceUser.Email))
{
Write-Warn(" User email is empty on source")
continue
}
$user.Email = $sourceUser.Email
$user.Update()
Write-Info(" Email was updated to " + $sourceUser.Email)
}