Exporter les paramètres de l’expérience Microsoft OneDrive

L’expérience Microsoft OneDrive d’un utilisateur stocke des informations pour aider l’utilisateur à trouver et à accéder au contenu qui l’intéresse. La plupart de ces informations sont accessibles par les utilisateurs finaux à l’aide des fonctionnalités intégrées au produit correspondantes répertoriées dans le tableau suivant :

Expérience Données stockées Accès utilisateur
Éléments partagés Liste des documents partagés avec l’utilisateur par d’autres personnes. Il présente également une vue des documents que l’utilisateur a partagés avec d’autres personnes, qui est une vue des autorisations que l’utilisateur a définies sur les éléments de son compte OneDrive. À partir du compte OneDrive d’un utilisateur, sélectionnez Partagé.
Notifications Push Mobile Notifications Push aux applications mobiles OneDrive et SharePoint des utilisateurs, si elles sont configurées. Cela inclut les activités pertinentes telles que les nouveaux fichiers partagés avec eux.
Les administrateurs peuvent les gérer dans la page Paramètres du nouveau Centre d’administration SharePoint.
Sites et contenu suivis Les utilisateurs peuvent suivre des sites, des documents ou des personnes.
Les sites suivis peuvent être affichés à l’aide d’expériences intégrées au produit.
Les sites suivis peuvent être consultés et gérés dans l’expérience d’accueil SharePoint. Cette expérience montre également les sites récents .
À partir de son compte OneDrive, l’utilisateur peut sélectionner l’icône d’engrenages Paramètres, Paramètres du site, puis Flux d’actualités. Sur le côté droit, il peut cliquer sur le type de contenu approprié sous Je suis.
Flux d’actualités Liste des activités de l’utilisateur, y compris le contenu suivi, les mentions et les modifications de profil. Les utilisateurs peuvent y accéder à l’aide d’expériences intégrées au produit. À partir de son compte OneDrive, l’utilisateur peut sélectionner l’icône d’engrenages Paramètres, Paramètres du site, puis Flux d’actualités.
Les paramètres Flux d’actualités peuvent être gérés dans le cadre de l’expérience de profil utilisateur, décrite précédemment.
Demandes d’accès Liste des demandes d’accès au contenu. À partir de son compte OneDrive, l’utilisateur peut sélectionner l’icône d’engrenages Paramètres, Paramètres du site, puis Demandes d’accès et invitations.

Un administrateur peut exporter ces listes à l’aide de PnP PowerShell et des commandes CSOM (SharePoint Client-Side Object Model) dans cet article. Tous les assemblys CSOM nécessaires sont inclus dans le module Microsoft PowerShell SharePointPnPPowerShellOnline.

Il s’agit d’un exemple de script qui peut être adapté pour répondre aux besoins de votre organisation. Par exemple, un administrateur peut extraire les informations pour user1@contoso.com à l’aide de la procédure suivante.

  1. Attribuez-vous des autorisations d’administrateur sur le compte OneDrive de l’utilisateur. Cette opération peut être effectuée dans le Centre d’administration Microsoft 365.

  2. Installez les modules Microsoft PowerShell requis :

    Install-Module SharePointPnPPowerShellOnline

    Install-Module CredentialManager

  3. Exécutez le script PowerShell ExportODBLists ci-dessous (ou une version personnalisée du script) :

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

    ExportODBLists.ps1 -siteUrl $ODBSite

Le script exporte les données stockées pour les fonctionnalités décrites dans le tableau précédent vers plusieurs fichiers CSV. L’administrateur peut les réviser ou les éditer avant de les fournir à l’utilisateur final.

Le script crée les fichiers CSV suivants (si les listes correspondantes sont trouvées). Le nom du fichier CSV correspond au titre de la liste.

Fichier Description
(Référence, <id>).csv, où <id> est une séquence de lettres et de chiffres Liste des éléments partagés avec l’utilisateur
Sharing Links.csv Liste de liens partagés générée par l’utilisateur
userActivityFeedHiddenListF4387007-BE61-432F-8BDB-85E6B9679E4B.csv Liste des activités pertinentes
notificationSubscriptionHiddenList6D1E55DA-2564-4A22-A5F9-6C4FCAFF53DE.csv Liste des notifications envoyées aux applications mobiles et des ID d’application pour ces appareils
Social.csv Liste du contenu suivi
MicroFeed.csv Liste d’éléments du flux d’actualités
Access Requests.csv Liste des demandes d’accès
SharePointHomeCacheList.csv Données mises en cache de l’utilisateur accédant à La page d’accueil SharePoint. Il est actualisé chaque fois que l’utilisateur accède à SharePoint Accueil.

Script ExportODBLists

Copiez le contenu ci-dessous et collez-le dans un fichier texte. Enregistrez le fichier sous ExportODBLists.ps1. Le script peut exporter tous les champs des listes cibles à l’aide du exportAllFields paramètre . Le script peut être modifié pour exporter toutes les listes et gérer d’autres sites.

Remarque

Si vous voyez une erreur indiquant qu’un assembly n’est pas chargé, vérifiez le chemin d’accès à la dernière version du module PowerShell SharePointPnPPowerShellOnline tel que défini dans les paramètres de chemin d'Add-Type. Le chemin d’accès peut être différent sur votre ordinateur ou vous pouvez utiliser une autre version du module (la version du module fait partie du chemin d’accès).

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