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.
Weisen Sie sich Administratorberechtigungen für das OneDrive-Konto des Benutzers zu. Dies kann im Microsoft 365 Admin Center erfolgen.
Installieren Sie die erforderlichen Microsoft PowerShell-Module:
Install-Module SharePointPnPPowerShellOnline
Install-Module CredentialManager
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
}
}