Sincronizar/actualizar el nombre para mostrar del usuario desde Active Directory a SharePoint mediante PowerShell
Problema:
Encontramos discrepancias en las propiedades del usuario entre AD y SharePoint. P.ej. La propiedad del nombre para mostrar del usuario se actualiza en Active Directory. Pero SharePoint todavía muestra el antiguo nombre para mostrar del usuario.
¿Cómo sincronizar el nombre para mostrar del usuario de Active Directory a SharePoint?
Lo ideal es que una configuración adecuada de sincronización del perfil de usuario de SharePoint evite este tipo de problemas. Utilice estos scripts de PowerShell para forzar actualizaciones de AD a SharePoint. Podemos usar el script de PowerShell para actualizar el nombre para mostrar del usuario. P.ej.
Set-SPUser -Identity "i:0#.w|domain\username" -DisplayName "NewDisplayName" -Web https://sp-site
El cmdlet anterior actualiza el nombre para mostrar del usuario determinado para el sitio en particular. Hagámoslo para todos los usuarios del sitio (subsitio).
Sincronizar todos los usuarios de una colección de sitios desde Active Directory:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Subsite URL
$SiteURL = "https://portal.crescent.com/Teams/globalfunctions/compliance/"
#Get all users of the subsite
$UsersColl = Get-SPUser -web $SiteURL -limit ALL
#Process each user
foreach($user in $UsersColl)
{
#Sync user from Active directory
$User | Set-SPUser -SyncFromAD -ErrorAction SilentlyContinue
Write-host -foregroundcolor green "Display Name for $($user.Name) updated"
}
Script de PowerShell para actualizar el nombre para mostrar del usuario en todas las colecciones de sitios en SharePoint:
Este script de PowerShell escanea y actualiza las propiedades del usuario dadas en todos los sitios.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Variables
$UserID = "i:0#.w|Crescent\MichaelF"
$NewDisplayName = "Michael Fisher"
#Get All Site Collections
$Sites = Get-SPSite -limit all
#Iterate through each site collection
foreach ($Site in $Sites)
{
#Try to Get the User from site collection
$User = Get-SPUser -identity $UserID -web $Site.url -ErrorAction SilentlyContinue
#If User found
If($user)
{
#Update the Display Name of the user
Set-SPUser -identity $user -DisplayName $NewDisplayName
Write-host -foregroundcolor green "Display Name updated in Site $($site.url)"
}
}
Si bien el código anterior establece solo el nombre para mostrar dado, sincronicemos todas las propiedades, como correo electrónico, departamento, puesto de trabajo, etc., de AD a SharePoint:
$User = Get-SPuser "i:0#.w|Crescent\michaelf" -web https://intranet.crescent.com
$User | Set-SPUser -SyncFromAD
Sincronizar un usuario particular de AD en una colección de sitios:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Parameters
$UserID="Crescent\Jaten" #Classic Authentication
$SiteURL="https://portal.crescent.com"
#Get All sites of the Site Collection
$Sites = Get-SPSite $SiteURL | Get-SPWeb -limit all
#Iterate through each site collection
ForEach ($Site in $Sites)
{
Write-host "Processing Site:"$Site.URL
#Try to Get the User from site collection
$User = Get-SPUser $UserID -web $Site.url -ErrorAction SilentlyContinue
if($User -ne $Null)
{
#Sync User
$User | Set-SPUser -SyncFromAD -ErrorAction SilentlyContinue
Write-host -foregroundcolor green "Display Name for $($user.Name) updated in Site $($site.url)"
}
}
Sincronizar todas las propiedades del usuario desde Active Directory en todos los sitios:
¿Qué tal sincronizar todas las propiedades de los usuarios en todos los sitios de SharePoint 2010?
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Get All Site Collections
$Sites = Get-SPSite -limit all
#Iterate through each site collection
ForEach ($Site in $Sites)
{
#Try to Get the User from site collection
$UsersColl = Get-SPUser -web $Site.url
#Process each user
foreach($user in $UsersColl)
{
$User | Set-SPUser -SyncFromAD -ErrorAction SilentlyContinue
Write-host -foregroundcolor green "Display Name for $($user.Name) updated in Site $($site.url)"
}
}
