Share via


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.

  1. 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.

  2. Installare i moduli Microsoft PowerShell richiesti:

    Install-Module SharePointPnPPowerShellOnline

    Install-Module CredentialManager

  3. 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.

Script ExportODBLists

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