Exportación de la configuración de la experiencia de Microsoft OneDrive

La experiencia de Microsoft OneDrive de un usuario almacena información para ayudar al usuario a buscar y navegar al contenido de su interés. Los usuarios finales pueden acceder a la mayor parte de esta información mediante las características del producto correspondientes enumeradas en la tabla siguiente:

Experiencia Datos almacenados Acceso de usuarios
Elementos compartidos Una lista de documentos compartidos con el usuario por otros usuarios. También presenta una vista de los documentos que el usuario ha compartido con otros usuarios, que es una vista de los permisos que el usuario ha establecido en los elementos de su cuenta de OneDrive. En el OneDrive de un usuario, seleccione Compartido.
Notificaciones push móviles Notificaciones push a las aplicaciones móviles de OneDrive y SharePoint de los usuarios, si están configuradas. Esto incluye la actividad pertinente, como los nuevos archivos compartidos con ellos.
Los administradores pueden administrarlos en la página Configuración del nuevo Centro de administración de SharePoint.
Contenido y sitios seguidos Los usuarios pueden seguir a sitios, documentos o personas.
Los sitios seguidos se pueden ver con las experiencias en el producto.
Los sitios seguidos se pueden ver y administrar en la experiencia inicio de SharePoint. Esta experiencia también muestra sitios recientes .
Desde la cuenta de OneDrive de un usuario, pueden seleccionar el icono de engranaje de Configuración, hacer clic en Configuración del sitio y, después, seleccionar Suministro de noticias. En la parte derecha, pueden hacer clic en el tipo de contenido adecuado debajo de Siguiendo.
Suministro de noticias Una lista de actividades de usuario, incluido el contenido seguido, las menciones y los cambios de perfil. Los usuarios pueden acceder a él mediante experiencias en el producto. Desde la cuenta de OneDrive de un usuario, pueden seleccionar el icono de engranaje de Configuración, hacer clic en Configuración del sitio y, después, seleccionar Suministro de noticias.
La configuración de Newsfeed se puede administrar como parte de la experiencia del perfil del usuario, que se describió anteriormente.
Solicitudes de acceso Una lista del acceso a contenidos solicitado. Desde la cuenta de OneDrive de un usuario, pueden seleccionar el icono de engranaje de Configuración, hacer clic en Configuración del sitio y, después, seleccionar Solicitudes de acceso e invitaciones.

Un administrador puede exportar estas listas mediante los comandos PnP PowerShell y SharePoint Client-Side Object Model (CSOM) de este artículo. Todos los ensamblados CSOM necesarios se incluyen en el módulo SharePointPnPPowerShellOnline de Microsoft PowerShell.

Se trata de un script de ejemplo y se puede adaptar para satisfacer las necesidades de su organización. Por ejemplo, un administrador puede extraer la información de user1@contoso.com mediante el procedimiento siguiente.

  1. Asigne a su usuario permisos de administrador en la cuenta de OneDrive del usuario. Esto puede hacerse en el Centro de administración de Microsoft 365.

  2. Instale los módulos de Microsoft PowerShell necesarios:

    Install-Module SharePointPnPPowerShellOnline

    Install-Module CredentialManager

  3. Ejecute el script ExportODBLists de PowerShell siguiente (o una versión personalizada del script):

    $ODBSite = "https://contoso-my.sharepoint.com/personal/user1_contoso_com"

    ExportODBLists.ps1 -siteUrl $ODBSite

El script exportará los datos almacenados para las características descritas en la tabla anterior a varios archivos CSV. El administrador puede revisar o redactar antes de proporcionarlos al usuario final.

El script crea los siguientes archivos CSV (si se encuentran las listas correspondientes). El nombre del archivo CSV corresponde al título de la lista.

Archivo Descripción
(Referencia, <id>).csv, donde <id> es una secuencia de letras y números Lista de elementos compartidos con el usuario
Sharing Links.csv Lista de vínculos de uso compartido generados por el usuario
userActivityFeedHiddenListF4387007-BE61-432F-8BDB-85E6B9679E4B.csv Lista de actividades relevantes
notificationSubscriptionHiddenList6D1E55DA-2564-4A22-A5F9-6C4FCAFF53DE.csv Lista de notificaciones enviadas a aplicaciones móviles, e id. de aplicaciones para esos dispositivos
Social.csv Lista de contenido seguido
MicroFeed.csv Lista de elementos de Newsfeed
Access Requests.csv Lista de solicitudes de acceso
SharePointHomeCacheList.csv Datos almacenados en caché del usuario que navega a Inicio de SharePoint. Esto se actualiza cada vez que el usuario navega a Inicio de SharePoint.

Script ExportODBLists

Copie el contenido siguiente y péguelo en un archivo de texto. Guarde el archivo como ExportODBLists.ps1. El script puede exportar todos los campos de las listas de destino mediante el exportAllFields parámetro . El script se puede modificar para exportar todas las listas y controlar también otros sitios.

Nota:

Si ve un error sobre un ensamblado que no se está cargando, compruebe la ruta de acceso a la versión más reciente del módulo de PowerShell SharePointPnPPowerShellOnline tal como se define en los parámetros de ruta de acceso de Add-Type. La ruta de acceso puede ser diferente en el equipo o puede usar una versión diferente del módulo (la versión del módulo forma parte de la ruta de acceso).

#ExportODBLists
#Exports OneDrive experience settings, stored in several SharePoint lists

param([string]$siteUrl, [bool]$exportAllFields=$false, [bool]$useStoredCreds=$true, [string]$exportFolder)
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\SharePointPnPPowerShellOnline\2.26.1805.0\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\SharePointPnPPowerShellOnline\2.26.1805.0\Microsoft.SharePoint.Client.Runtime.dll"

if (!$siteUrl)
{
    Write-Host "Please specify a OneDrive site using -siteUrl."
    return
}

if ($useStoredCreds)
{
    Write-Host "Retrieving stored Windows credentials for $siteUrl."
    $cred = Get-StoredCredential -Target $siteUrl
    if (!$cred)
    {
        Write-Host "Didn't find stored credential for $siteUrl. Please provide credentials to connect."
        $cred = Get-Credential
    }
}
else
{
   $cred = Get-Credential
}

$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($cred.UserName,$cred.Password)
$webURL = $siteUrl
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webURL)
$ctx.Credentials = $credentials

#root folders of lists to export
$SWMRoot = "Reference " #starts with this string
$notificationsRoot = "notificationSubscriptionHiddenList6D1E55DA25644A22"
$activityFeedRoot = "userActivityFeedHiddenListF4387007BE61432F8BDB85E6"
$accessRequestsRoot = "Access Requests"
$microfeedRoot = "PublishedFeed"
$SPHomeCacheRoot = "SharePointHomeCacheList"
$sharingLinksRoot = "Sharing Links"
$socialRoot = "Social"

#list fields to eexport
$SWMFields = @("ID","Created","Modified","Title","RemoteItemPath","OwnerDisplayName","OwnerSipAddress","RemoteItemFileSystemObjectType",
                "RemoteItemCreatorDisplayName","RemoteItemCreatorSipAddress","RemoteItemCreatedDateTime",
                "RemoteItemModifierDisplayName","RemoteItemModifierSipAddress","RemoteItemModifiedDateTime",
                "SWMSharedByDisplayName","SWMSharedBySipAddress","SWMSharedByDateTime",
                "RemoteItemLastAccessedDateTime","RemoteItemServerRedirectedUrl","RemoteItemServerRedirectedEmbedUrl")
$accessRequestsFields = @("ID","Created","Modified","Title","RequestId","RequestedObjectTitle","RequestedObjectUrl","PermissionType","PermissionLevelRequested","RequestDate",
                            "RequestedByDisplayName","RequestedBy","ReqByUser",
                            "RequestedForDisplayName","RequestedFor","ReqForUser",
                            "ApprovedBy","AcceptedBy","Status","Expires","WelcomeEmailSubject","WelcomeEmailBody","ExtendedWelcomeEmailBody","Conversation")
$microfeedFields = @("ID","Created","Modified","Title","MicroBlogType","PostAuthor","RootPostOwnerID","RootPostUniqueID","ReplyCoungett","Order","ContentData")
$notificationsFields = @("ID","Created","Modified","Title","SubscriptionId","PoolName","SecondaryPoolName","AppType","NotificationHandle",
                            "SecondsToExpiry","DestinationType","SubmissionDateTime","ExpirationDateTime","Locale","DeviceId","HostName","NotificationCounter",
                            "SingleSignOutKey","NotificationScenarios","ComplianceAssetId","AppAuthor","AppEditor")
$SPHomeCacheFields = @("ID","Created","Modified","Author","Editor","Title","Value")
$sharingLinksFields = @("ID","Created","Modified","Title","SharingDocId","ComplianceAssetId","CurrentLink","AvailableLinks")
$socialFields = @("ID","Created","Modified","Author","Editor","Title","Url","Hidden","HasFeed","SocialProperties")
$activityFeedFields = @("ID","Created","Modified","Title","ActivityId","ItemId","PushNotificationsSent","EmailNotificationSent","IsActorActivity","IsRead","Order",
                        "ItemChildCount","FolderChildCount","ActivityEventType","ActivityEvent")


#get lists in the web
try{
    $lists = $ctx.web.Lists
    $ctx.load($lists)
    $ctx.executeQuery()
}
catch{
    write-host "$($_.Exception.Message)" -foregroundcolor red
}


#identify the lists to export
$listsToExport = @()
foreach($list in $lists)
{
    $ctx.load($list)
    $ctx.load($list.RootFolder)
    $ctx.executeQuery()
    $listTitle = [string]$list.Title
    $listRoot = $list.RootFolder.Name

    Write-host ("Processing List: " + $list.Title + " with " + $list.ItemCount + " items").ToUpper() -ForegroundColor Yellow
    Write-host (">> List Root Folder: " + $listRoot) -ForegroundColor Yellow

    if ($listRoot.StartsWith($SWMRoot,"CurrentCultureIgnoreCase") -and $list.ItemCount -ge 1)
    {
        Write-Host ">> Found: Shared With Me List" -ForegroundColor Green
        $listDetails = @{listType = "Shared With Me List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $SWMFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $notificationsRoot)
    {
        Write-Host ">> Found: Notifications List" -ForegroundColor Green
        $listDetails = @{listType = "Notifications List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $notificationsFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $activityFeedRoot)
    {
        Write-Host ">> Found: User Activity Feed List" -ForegroundColor Green
        $listDetails = @{listType = "User Activity Feed List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $activityFeedFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $accessRequestsRoot)
    {
        Write-Host ">> Found: Access Requests List" -ForegroundColor Green
        $listDetails = @{listType = "Access Requests List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $accessRequestsFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $microfeedRoot)
    {
        Write-Host ">> Found: MicroFeed List" -ForegroundColor Green
        $listDetails = @{listType = "Microfeed List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $microfeedFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $SPHomeCacheRoot)
    {
        Write-Host ">> Found: SharePoint Home Cache List" -ForegroundColor Green
        $listDetails = @{listType = "SharePoint Home Cache List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $SPHomeCacheFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $sharingLinksRoot)
    {
        Write-Host ">> Found: Sharing Links List" -ForegroundColor Green
        $listDetails = @{listType = "Sharing Links List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $sharingLinksFields}
        $listsToExport += $listDetails
    }
    elseif ($listRoot -eq $socialRoot)
    {
        Write-Host ">> Found: Social List" -ForegroundColor Green
        $listDetails = @{listType = "Social List"; listTitle = $listTitle; listRoot = $listRoot; listFields = $socialFields}
        $listsToExport += $listDetails
    }

}

#export list function
function exportList
{
    Param ([string] $listTitle, [string[]]$listFields, [string]$exportFile)

    Write-Host ("Exporting List: " + $listTitle).ToUpper() -ForegroundColor Green
    Write-Host (">> File location: $exportFile") -ForegroundColor Green

    #Get the list items
    $list = $lists.GetByTitle($listTitle)
    $listItems = $list.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
    $fieldColl = $list.Fields
    $ctx.load($listItems)
    $ctx.load($fieldColl)
    $ctx.executeQuery()

    if ($listFields) #if you're passing a specific set of fields, in a specific order, process those
    {
         #Array to Hold List Items
         $listItemCollection = @()
         #Fetch each list item value to export to excel
         foreach($item in $listItems)
         {
            $exportItem = New-Object PSObject

            Foreach ($field in $listFields)
            {
                    if($NULL -ne $item[$field])
                    {
                        #Expand the value of Person or Lookup fields
                        $fieldType = $item[$field].GetType().name
                        if (($fieldType -eq "FieldLookupValue") -or ($fieldType -eq "FieldUserValue"))
                        {
                            $fieldValue = $item[$field].LookupValue
                        }
                        elseif ($fieldType -eq "FieldUrlValue")
                        {
                            $fieldValue = $item[$field].Url
                        }
                        else
                        {
                            $fieldValue = $item[$field]
                        }
                    }
                    $exportItem | Add-Member -MemberType NoteProperty -name $field -value $fieldValue
            }
            #Add the object with above properties to the Array
            $listItemCollection += $exportItem
         }
        #Export the result Array to CSV file
        $listItemCollection | Export-CSV $exportFile -NoTypeInformation
    }
    else #export all fields for the list
    {
         #Array to Hold List Items
         $listItemCollection = @()
         #Fetch each list item value to export to excel
         foreach($item in $listItems)
         {
            $exportItem = New-Object PSObject
            Foreach($field in $fieldColl)
            {
                    if($NULL -ne $item[$field.InternalName])
                    {
                        #Expand the value of Person or Lookup fields
                        $fieldType = $item[$field.InternalName].GetType().name
                        if (($fieldType -eq "FieldLookupValue") -or ($fieldType -eq "FieldUserValue"))
                        {
                            $fieldValue = $item[$field.InternalName].LookupValue
                        }
                        elseif ($fieldType -eq "FieldUrlValue")
                        {
                            $fieldValue = $item[$field].Url
                        }
                        else
                        {
                            $fieldValue = $item[$field.InternalName]
                        }
                    }
                    $exportItem | Add-Member -MemberType NoteProperty -name $field.InternalName -value $fieldValue
            }
            #Add the object with above properties to the Array
            $listItemCollection += $exportItem
         }
        #Export the result Array to CSV file
        $listItemCollection | Export-CSV $exportFile -NoTypeInformation
    }

}

#export the lists
foreach ($list in $listsToExport)
{
     #if we have a valid folder for export, use it, otherwise export to the current directory
     if ($exportFolder -and (Test-Path $exportFolder -PathType Container))
     {
         $filepath = Join-Path -Path $exportFolder -ChildPath ($list["listTitle"] + ".csv")
     }
     else
     {
         $filepath = ($list["listTitle"] + ".csv")
     }

     #export the lists
     if ($exportAllFields)
     {
         exportList -listTitle $list["listTitle"] -exportFile $filepath
     }
     else
     {
         exportList -listTitle $list["listTitle"] -listFields $list["listFields"] -exportFile $filepath
     }
}