98 lines
1.8 KiB
PowerShell
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)
|
|
}
|