Esportare le impostazioni dell'esperienza di Microsoft OneDrive
L'esperienza di Microsoft OneDrive di un utente archivia informazioni che consentono all'utente di trovare e passare al contenuto di loro interesse. La maggior parte di queste informazioni è accessibile agli utenti finali usando le funzionalità di prodotto corrispondenti elencate nella tabella seguente:
Funzionalità | Dati archiviati | Accesso utente |
---|---|---|
Elementi condivisi | Elenco di documenti condivisi con l'utente da altri utenti. Presenta anche una visualizzazione dei documenti condivisi dall'utente con altri utenti, ovvero una visualizzazione delle autorizzazioni impostate dall'utente sugli elementi nel proprio account OneDrive. | Selezionare Condiviso da OneDrive dell'utente. |
Notifiche push su dispositivi mobili | Inviare notifiche push alle app OneDrive e SharePoint per dispositivi mobili degli utenti, se configurate. Ciò include attività rilevanti, ad esempio nuovi file condivisi con loro. Gli amministratori possono gestirli nella pagina Impostazioni della nuova interfaccia di amministrazione di SharePoint. |
|
Siti e contenuti visitati | Gli utenti possono visitare siti, visualizzare documenti o seguire persone. I siti visitati possono essere visualizzati attraverso esperienze incluse nel prodotto. |
I siti seguiti possono essere visualizzati e gestiti nell'esperienza Home di SharePoint. Questa esperienza mostra anche Siti recenti . Dall'account OneDrive di un utente, è possibile selezionare l'icona a forma di ingranaggio delle impostazioni, quindi selezionare Impostazioni sito e selezionare Impostazioni sitoe quindi Newsfeed. Sul lato destro, possono fare clic sul tipo di contenuto appropriato sotto Sto seguendo. |
Newsfeed | Elenco di attività utente, tra cui contenuto seguito, menzioni e modifiche del profilo. Gli utenti possono accederle usando esperienze all'in-product. | Dall'account OneDrive for Business di un utente, è possibile selezionare l'icona a forma di ingranaggio delle impostazioni, quindi selezionare Impostazioni sito e selezionare Newsfeed. Le impostazioni di newsfeed possono essere gestite come parte dell'esperienza del profilo utente precedentemente descritta. |
Richieste di accesso | Un elenco di richieste di accesso ai contenuti. | Dall'account OneDrive di un utente, è possibile selezionare l'icona a forma di ingranaggio delle impostazioni, quindi selezionare Impostazioni sito e selezionare Richieste di accesso e inviti |
Un amministratore può esportare questi elenchi usando i comandi PnP PowerShell e SharePoint Client-Side Object Model (CSOM) in questo articolo. Tutti gli assembly CSOM necessari sono inclusi nel modulo Di SharePointPnPPowerShellOnline di Microsoft PowerShell.
Questo è uno script di esempio e può essere adattato per soddisfare le esigenze dell'organizzazione. Ad esempio, un amministratore può estrarre le informazioni per user1@contoso.com usando la procedura seguente.
Assegnare a se stessi le autorizzazioni di amministrazione per l'account OneDrive dell'utente. Questa operazione può essere eseguita nell'interfaccia di amministrazione di Microsoft 365.
Installare i moduli Microsoft PowerShell richiesti:
Install-Module SharePointPnPPowerShellOnline
Install-Module CredentialManager
Eseguire lo script PowerShell di ExportODBLists riportato di seguito (o una versione personalizzata dello script):
$ODBSite = "https://contoso-my.sharepoint.com/personal/user1_contoso_com"
ExportODBLists.ps1 -siteUrl $ODBSite
Lo script esporterà i dati archiviati per le funzionalità descritte nella tabella precedente in più file CSV. L'amministratore può esaminare o redigere prima di fornirli all'utente finale.
Lo script crea i file CSV seguenti (se vengono trovati gli elenchi corrispondenti). Il nome del file CSV corrisponde al titolo dell'elenco.
File | Descrizione |
---|---|
(Riferimento, <id>).csv, dove <id> è una sequenza di lettere e numeri | Elenco di elementi condivisi con l'utente |
Collegamenti di condivisione con formato csv | Elenco di collegamenti di condivisione generati dall'utente |
userActivityFeedHiddenListF4387007-BE61-432F-8BDB-85E6B9679E4B.csv | Elenco di attività pertinenti |
notificationSubscriptionHiddenList6D1E55DA-2564-4A22-A5F9-6C4FCAFF53DE.csv | Elenco di notifiche inviate all'app per dispositivi mobili e ID app associati |
Social.csv | Elenco di contenuti seguiti |
MicroFeed.csv | Elenco di elementi di Newsfeed |
Richieste di accesso con formato csv | Elenco di richieste di accesso |
SharePointHomeCacheList.csv | Dati memorizzati nella cache dall'utente che accede a SharePoint Home. Questa operazione viene aggiornata ogni volta che l'utente passa alla home page di SharePoint. |
Copiare il contenuto seguente e incollarlo in un file di testo. Salvare il file come ExportODBLists.ps1. Lo script può esportare tutti i campi dagli elenchi di destinazione usando il exportAllFields
parametro . Lo script può essere modificato per esportare tutti gli elenchi e per gestire anche altri siti.
Nota
Se viene visualizzato un errore relativo al mancato caricamento di un assembly, controllare di nuovo il percorso della versione più recente del modulo PowerShell SharePointPnPPowerShellOnline, come definito nei parametri percorso Add-Type. Il percorso potrebbe essere diverso nel computer o si potrebbe usare una versione diversa del modulo (la versione del modulo fa parte del percorso).
#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
}
}