-1

JSOM/CSOM または REST API を使用して、サイト コレクション内のすべてのユーザー プロファイルを取得するにはどうすればよいですか?

完全に機能するものは何も見つかりません。次のプロパティが必要です。

  • ユーザー名
  • モバイル
  • Eメール
  • プロフィールの写真

前もって感謝します

4

2 に答える 2

0

Microsoft Graph を使用して、以下の要求を介してすべてのユーザーを取得できます。

GET:https://graph.microsoft.com/v1.0/users

DisplayNamemobilePhonemailプロパティを介して、ユーザー名、モバイル、および電子メールを取得できます。プロフィール写真を取得するには、各ユーザーに対して以下のようなリクエストを送信する必要があります。

https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/photo/$value

また、Microsoft Graph REST API を呼び出すには、アプリを登録し、アプリに適切なアクセス許可を付与する必要があります。

List Userのスコープ:

User.ReadBasic.All; User.Read.All; User.ReadWrite.All; Directory.Read.All; Directory.ReadWrite.All; Directory.AccessAsUser.All

写真を取得するためのスコープ:

User.Read; User.ReadBasic.All; User.Read.All; User.ReadWrite.All; User.Read

また、異なるユーザーのプロファイルを取得する必要があるため、アプリのみのトークン (デーモン サービス アプリ) を使用する必要があります。

サービスまたはデーモン アプリでの Microsoft Graph の呼び出しについては、こちらを参照してください

于 2016-07-14T03:37:26.020 に答える
0

すべてのユーザーをファイルにエクスポートする必要がある場合は、powershell を使用します。以下のコードで、クライアント ライブラリの場所とサイト コレクションの URL の 2 点を変更する必要があります。

    Add-Type -Path "c:\DLLS\Microsoft.SharePoint.Client.dll" 
    Add-Type -Path "c:\DLLS\Microsoft.SharePoint.Client.Runtime.dll" 
    Add-Type -Path "c:\DLLS\Microsoft.SharePoint.Client.UserProfiles.dll" 

    #Mysite URL
    $site = 'https://NAME.sharepoint.com/'

    #Get the Client Context and Bind the Site Collection
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($site)

    #Authenticate
    $newCredentials = Get-Credential
    $UserName = $newCredentials.UserName
    $SecurePassword = $newCredentials.Password
    $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword) 
    $context.Credentials = $credentials 

    #Fetch the users in Site Collection
    $users = $context.Web.SiteUsers
    $context.Load($users)
    $context.ExecuteQuery()


    #Create an Object [People Manager] to retrieve profile information
    $people = New-Object Microsoft.SharePoint.Client.UserProfiles.PeopleManager($context)
    $collection = @()

    Write-Host "Found" $users.Count " users. Exporting..."

    for($I = 1; $I -lt $users.Count; $I++ ){
        try
        {
            $percCompl = [Math]::Floor(($I / $users.Count) * 100)
            Write-Progress -Activity Updating -Status 'Progress->' -CurrentOperation "$percCompl% complete" -PercentComplete $percCompl;
            $user = $users[$I]
            $userprofile = $people.GetPropertiesFor($user.LoginName)
            $context.Load($userprofile)
            $context.ExecuteQuery()

            $profileData = "" | Select "FirstName", "LastName", "UserName",  "WorkEmail", "WorkPhone", "Department", "JobTitle", "Location", "SiteUrl"
            if($userprofile -ne $null -and $userprofile.Email -ne $null)
            {
                $upp = $userprofile.UserProfileProperties
                $profileData.FirstName = $upp.FirstName
                $profileData.LastName = $upp.LastName
                $profileData.UserName = $upp.UserName
                $profileData.WorkEmail = $upp.WorkEmail
                $profileData.WorkPhone = $upp.WorkPhone
                $profileData.Department = $upp.'SPS-Department'
                $profileData.JobTitle = $upp.'SPS-JobTitle'
                $profileData.Location = $upp.'SPS-Location'
                $profileData.SiteUrl = $site
                $collection += $profileData
            }
            else{
                $profileData.FirstName = $user.UserId
                $profileData.LastName = $upp.Title
                $profileData.WorkEmail = $user.Email
                $profileData.SiteUrl = $site
                $collection += $profileData
            }            
        }
        catch 
        {
            Write-Host "UserError: " $user.LoginName ". Error detail:" $($_)
        } 
    }

    $collection | Export-Csv C:\SPO-Users.csv -NoTypeInformation -Encoding UTF8
    Write-Host "Done!" -ForegroundColor Green
于 2016-07-14T09:41:32.720 に答える