Exporter des paramètres d’expérience Microsoft OneDrive
L’expérience Microsoft OneDrive d’un utilisateur stocke les informations lui permettant de rechercher du contenu utile et d’y accéder. La plupart de ces informations sont accessibles par des utilisateurs finaux qui utilisent les fonctions 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 de documents partagés avec l’utilisateur par d’autres personnes. Affiche également les documents que l’utilisateur a partagés avec d’autres personnes ; il s’agit d’une vue des autorisations que l’utilisateur a définies sur les éléments dans son compte OneDrive. | À partir du compte OneDrive d’un utilisateur, sélectionnez Partagé. |
| Notifications Push Mobile | Envoyez des notifications Push aux applications mobiles SharePoint et OneDrive de l’utilisateur, si elles sont configurées. Elles incluent les activités pertinentes (nouveaux fichiers partagés, par exemple). Les administrateurs peuvent les gérer sur la page Paramètres du nouveau centre SharePoint’administration. |
|
| 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 affichés et gérés dans l’expérience de la page d’accueil SharePoint. Cette expérience affiche aussi 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 utilisateur, notamment le contenu suivi, les mentions et les modifications de profil. Les utilisateurs peuvent y accéder à l’aide des 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 PowerShell PnP et des commandes SharePoint Client-Side modèle objet (CSOM) dans cet article. Tous les assemblys CSOM nécessaires sont inclus dans le module SharePointPnPPowerShellOnline Microsoft PowerShell.
Ceci est un exemple de script qui peut être adapté pour répondre aux besoins de votre organisation. Par exemple, un administrateur peut extraire les informations relatives à user1@contoso.com à l’aide de la procédure suivante.
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.
Installez les modules Microsoft PowerShell requis :
Install-Module SharePointPnPPowerShellOnlineInstall-Module CredentialManagerExé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 examiner ou les modifier avant de les remettre à l’utilisateur final.
Le script crée les fichiers CSV suivants (si les listes correspondantes sont détecté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 en cache de l’utilisateur parcourant la page d’accueil SharePoint. Ces données sont actualisées à chaque fois que l’utilisateur accède à la page d’accueil SharePoint. |
Script ExportODBLists
Copiez le contenu ci-dessous et collez-le dans un fichier texte. Enregistrez le fichier sous ExportODBLists.ps1. Le script permet d’exporter tous les champs des listes cibles à l’aide du paramètre exportAllFields. Le script peut être modifié pour exporter toutes les listes et traiter d’autres sites.
Notes
Si vous voyez une erreur indiquant qu’un assembly n’a pas été chargé, vérifiez le chemin d’accès vers la dernière version du module PowerShell SharePointPnPPowerShellOnline comme défini dans les paramètres Add-Type Path. Le chemin d’accès peut être différent sur votre ordinateur ou vous utilisez peut-être 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
}
}