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) }