英語で読む

次の方法で共有


Microsoft OneDrive エクスペリエンス設定をエクスポートする

ユーザーの Microsoft OneDrive エクスペリエンスは、ユーザーが関心のあるコンテンツを見つけて移動するのに役立つ情報を格納します。 この情報のほとんどは、次の表に示す対応する製品内機能を使用してエンド ユーザーがアクセスできます。

エクスペリエンス 保存されるデータ ユーザー アクセス
共有アイテム 他のユーザーが共有するドキュメントの一覧。 また、ユーザーが他のユーザーと共有したドキュメントのビューも表示されます。これは、ユーザーが OneDrive アカウントのアイテムに対して設定したアクセス許可のビューです。 ユーザーの OneDrive から、[共有] を選択します。
モバイル プッシュ通知 構成されている場合は、ユーザーの OneDrive および SharePoint モバイル アプリにプッシュ通知を送信します。 これには、関連するアクティビティ (共有された新しいファイルなど) が含まれます。
管理者は、新しい SharePoint 管理センターの [設定] ページでこれらを管理できます。
フォロー対象サイトとコンテンツ ユーザーは、サイト、ドキュメント、またはユーザーをフォローできます。
フォロー対象サイトは、製品内のエクスペリエンスを使用して表示できます
フォローされているサイトは、SharePoint Home エクスペリエンスで表示および管理できます。 このエクスペリエンスでは、 最近使ったサイト も表示されます。
ユーザーの OneDrive アカウントから、ユーザーは [設定] ギア アイコンを選択して、[サイト設定][ニュースフィード] を選択できます。 右側で、[フォロー中] の下で適切なコンテンツ 対応をクリックできます。
ニュースフィード フォローされているコンテンツ、メンション、プロファイルの変更など、ユーザー アクティビティの一覧。 ユーザーは、製品内エクスペリエンスを使用してアクセスできます。 ユーザーの OneDrive アカウントから、ユーザーは [設定] ギア アイコンを選択して、[サイト設定]、[ニュースフィード] を選択できます。
ニュースフィードの設定は、前述したように、ユーザー プロファイル エクスペリエンスの一部として管理できます。
アクセス権の要求 要求したコンテンツへのアクセス権のリスト。 ユーザーの OneDrive アカウントから、ユーザーは [設定] ギア アイコンを選択して、[サイト設定][アクセスの依頼と招待状] の順に選択できます

管理者は、この記事の PnP PowerShellSharePoint Client-Side オブジェクト モデル (CSOM) コマンドを使用して、これらのリストをエクスポートできます。 必要なすべての CSOM アセンブリは、SharePointPnPPowerShellOnline Microsoft PowerShell モジュールに含まれています。

これはサンプル スクリプトであり、組織のニーズに合わせて調整できます。 たとえば、管理者は、次の手順を使用して の user1@contoso.com 情報を抽出できます。

  1. ユーザーの OneDrive アカウントへの管理者アクセス許可を自分自身に割り当てます。 これは、Microsoft 365 管理センターから実行できます。

  2. 必要な Microsoft PowerShell モジュールをインストールします。

    Install-Module SharePointPnPPowerShellOnline

    Install-Module CredentialManager

  3. 以下の ExportODBLists PowerShell スクリプト (またはスクリプトのカスタマイズ バージョン) を実行します。

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

    ExportODBLists.ps1 -siteUrl $ODBSite

スクリプトは、前の表で説明した機能に格納されているデータを複数の CSV ファイルにエクスポートします。 管理者は、エンド ユーザーに提供する前に確認または編集できます。

スクリプトでは、次の CSV ファイルが作成されます (対応するリストが見つかった場合)。 CSV ファイルの名前は、リストのタイトルに対応します。

ファイル 説明
(参照、 <id>).csv。 <ここで、id> は文字と数字のシーケンスです ユーザーと共有される項目の一覧
Sharing Links.csv ユーザーにより生成された共有リンクのリスト
userActivityFeedHiddenListF4387007-BE61-432F-8BDB-85E6B9679E4B.csv 関連するアクティビティのリスト
notificationSubscriptionHiddenList6D1E55DA-2564-4A22-A5F9-6C4FCAFF53DE.csv モバイル アプリに送信された通知とこれらのデバイスのアプリ ID のリスト
Social.csv フォローされたコンテンツのリスト
MicroFeed.csv ニュースフィード アイテムのリスト
Access Requests.csv アクセス権の要求のリスト
SharePointHomeCacheList.csv SharePoint Home に移動しているユーザーからキャッシュされたデータ。 これは、ユーザーが SharePoint Home に移動するたびに更新されます。

ExportODBLists スクリプト

以下の内容をコピーし、テキスト ファイルに貼り付けます。 ファイルを ExportODBLists.ps1として保存します。 スクリプトは、 パラメーターを使用してターゲット リストからすべてのフィールドを exportAllFields エクスポートできます。 スクリプトを変更して、すべてのリストをエクスポートしたり、他のサイトを処理したりできます。

注意

読み込まれていないアセンブリに関するエラーが発生した場合は、Add-Type パス パラメーターで定義されている SharePointPnPPowerShellOnline PowerShell モジュールの最新バージョンへのパスを再確認します。 パスは、コンピューター上で異なる場合があります。または、別のバージョンのモジュールを使用している場合があります (モジュールのバージョンはパスの一部です)。

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