Turn on more accessible mode
Skip Ribbon Commands
Skip to main content
Turn on Animations

Eliminar Perfiles de Usuarios renuentes

Codigo


La sincronización de AD y la Base de Datos de Perfiles ocurre en una dirección solamente, y sucede con frecuencia que después de eliminar un usuario en AD, su cuenta permanece activa en los Perfiles.
Autor: Gustavo

Cuando esto sucede, se puede ver en la pantalla de "Ver perfiles de usuario", vista "Faltan por importar" los usuarios que ya no existen en AD, pero que se conservan activos en los Perfiles:

Esto ocurre porque en la Base de Datos el campo "bDeleted" de la tabla "UserProfile" es marcado como "1". Para encontrar todos los usuarios que "Faltan por importar", puede utilizar el siguiente query en SQL:

SELECT UserID FROM UserProfile WHERE (bDeleted = 1)

Eliminar un par de usuarios no es problemático desde la pantalla de administración de SharePoint, pero si se ha hecho una reorganización de cientos de usuarios, es mucho mas rápido eliminarlos utilizando código basado en el Modelo de Objetos de SPS. La siguiente función puede realizar el trabajo:

public void RemoveProfiles()
{
  try
  {
    TopologyManager myTopMan = new TopologyManager();
    PortalSite myPortalSite = myTopMan.PortalSites[new Uri("URL del Sitio")];
    PortalContext myPortalContext = PortalApplication.GetContext(myPortalSite);
    UserProfileManager myUserProMan = new UserProfileManager(myPortalContext);

    //Conexión a la Base de Datos de Perfiles
    SqlConnection myConn = new SqlConnection("server=(NombreServer);database=[NombreBD]_PROF;Trusted_Connection=yes");
    SqlDataAdapter myDA = new SqlDataAdapter ("SELECT UserID FROM UserProfile WHERE (bDeleted = 1)", myConn);
    DataSet myDS = new DataSet();
    myDA.Fill (myDS);

    if(myDS.Tables[0].Rows.Count > 0)
    {
      foreach(DataRow myDR in myDS.Tables[0].Rows)
      {
        myUserProMan.RemoveUserProfile((System.Guid)myDR["UserID"]);
      }
    }
  }
  catch(Exception ex)
  {
    //"Algo a salido muy mal...";
  }
}