Exportieren von Microsoft OneDrive-Einstellungen für die Benutzeroberfläche

Die Microsoft OneDrive-Benutzeroberfläche eines Benutzers speichert Informationen, die dem Benutzer helfen, inhalte zu finden und zu diesen zu navigieren, die für sie von Interesse sind. Auf die meisten dieser Informationen können Endbenutzer mit den entsprechenden produktinternen Features zugreifen, die in der folgenden Tabelle aufgeführt sind:

Umgebung Gespeicherte Daten Benutzerzugriff
Freigegebene Elemente Eine Liste der Dokumente, die von anderen Benutzern für den Benutzer freigegeben wurden. Außerdem wird eine Ansicht der Dokumente angezeigt, die der Benutzer für andere Benutzer freigegeben hat. Dabei handelt es sich um eine Ansicht der Berechtigungen, die der Benutzer für die Elemente in ihrem OneDrive-Konto festgelegt hat. Wählen Sie auf der OneDrive eines Benutzers freigegebenenaus.
Mobile Pushbenachrichtigungen Pushbenachrichtigungen an die mobilen OneDrive- und SharePoint-Apps der Benutzer, sofern konfiguriert. Dies schließt relevante Aktivitäten ein, z. B. neue Dateien, die für sie freigegeben werden.
Administratoren können diese auf der Seite Einstellungen des neuen SharePoint Admin Centers verwalten.
Gefolgte Websites und Inhalte Benutzer können Websites, Dokumenten oder Personen folgen.
Gefolgte Websites können mit den Oberflächen im Produkt angezeigt werden.
Gefolgte Websites können auf der SharePoint-Startseite angezeigt und verwaltet werden. Diese Erfahrung zeigt auch Zuletzt verwendete Websites an.
Aus dem OneDrive-Konto eines Benutzers kann er das Zahnradsymbol "Einstellungen" auswählen, Websiteeinstellungenund dann Newsfeed-auswählen. Auf der rechten Seite können die Benutzer auf den entsprechenden Inhaltstyp unter "Ich Folge" klicken.
Newsfeed Eine Liste der Benutzeraktivitäten, einschließlich gefolgter Inhalte, Erwähnungen und Profiländerungen. Benutzer können über produktinterne Erfahrungen darauf zugreifen. Sie können aus dem OneDrive-Konto eines Benutzers das Zahnradsymbol für Einstellungen auswählen, dann Websiteeinstellungen auswählen und dann Newsfeed auswählen.
Die Newsfeedeinstellungen können als Teil der Benutzerprofiloberfläche verwaltet werden, die zuvor beschrieben wurde.
Zugriffsanforderungen Eine Liste der Zugriffsanforderungen für Inhalte. Aus dem OneDrive-Konto eines Benutzers kann man das Zahnradsymbol "Einstellungen" auswählen, Websiteeinstellungenauswählen und dann Access-Anforderungen und-Einladungen auswählen.

Ein Administrator kann diese Listen mithilfe von PnP PowerShell und sharePoint Client-Side Object Model (CSOM) -Befehlen in diesem Artikel exportieren. Alle erforderlichen CSOM-Assemblys sind im Microsoft PowerShell-Modul SharePointPnPPowerShellOnline enthalten.

Dies ist ein Beispielskript, das an die Anforderungen Ihrer Organisation angepasst werden kann. Beispielsweise kann ein Administrator die Informationen für user1@contoso.com mithilfe des folgenden Verfahrens extrahieren.

  1. Weisen Sie sich Administratorberechtigungen für das OneDrive-Konto des Benutzers zu. Dies kann im Microsoft 365 Admin Center erfolgen.

  2. Installieren Sie die erforderlichen Microsoft PowerShell-Module:

    Install-Module SharePointPnPPowerShellOnline

    Install-Module CredentialManager

  3. Führen Sie das folgende PowerShell-Skript „ExportODBLists“ (oder eine angepasste Version des Skripts) aus:

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

    ExportODBLists.ps1 -siteUrl $ODBSite

Das Skript exportiert Daten, die für die in der vorherigen Tabelle beschriebenen Features gespeichert sind, in mehrere CSV-Dateien. Der Administrator kann sie überprüfen oder bearbeiten, bevor er sie dem Endbenutzer zur Verfügung stellt.

Das Skript erstellt die folgenden CSV-Dateien (wenn die entsprechenden Listen gefunden werden). Der Name der CSV-Datei entspricht dem Titel der Liste.

Datei Beschreibung
(Verweis, <id>).csv, wobei <id> eine Sequenz von Buchstaben und Zahlen ist Liste von Elementen, die für den Benutzer freigegeben sind.
Sharing Links.csv Liste der vom Benutzer generierten Freigabelinks
userActivityFeedHiddenListF4387007-BE61-432F-8BDB-85E6B9679E4B.csv Liste relevanter Aktivitäten
notificationSubscriptionHiddenList6D1E55DA-2564-4A22-A5F9-6C4FCAFF53DE.csv Liste von Benachrichtigungen, die an mobile Apps gesendet wurden, und App-IDs für diese Geräte
Social.csv Liste verfolgter Inhalte
MicroFeed.csv Liste der Newsfeedelemente
Access Requests.csv Liste der Zugriffsanforderungen
SharePointHomeCacheList.csv Zwischengespeicherte Daten des Benutzers, der zur SharePoint-Startseite navigiert. Dies wird jedes Mal aktualisiert, wenn der Benutzer zur SharePoint-Startseite navigiert.

ExportODBLists-Skript

Kopieren Sie den folgenden Inhalt, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als ExportODBLists.ps1. Das Skript kann alle Felder aus den Ziellisten mithilfe des exportAllFields Parameters exportieren. Das Skript kann geändert werden, um alle Listen zu exportieren und auch andere Websites zu verarbeiten.

Hinweis

Wenn ein Fehler angezeigt wird, dass eine Assembly nicht geladen wird, überprüfen Sie den Pfad zur neuesten Version des SharePointPnPPowerShellOnline PowerShell-Moduls, wie in den Add-Type Path-Parametern definiert. Der Pfad kann auf Ihrem Computer unterschiedlich sein, oder Sie verwenden möglicherweise eine andere Version des Moduls (die Modulversion ist Teil des Pfads).

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