Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Problema de paginación de Microsoft Graph

Estoy intentando obtener una lista de todos mis usuarios en Azure Active Directory, estoy usando la API de Microsoft Graph y puedo obtener una lista de hasta 999 usando el parámetro $top=999, pero mi juego de registros será más de 999, así que comencé a investigar cómo usar el skiptoken para recuperar las otras páginas de datos. Logré retirar una segunda página, pero no más. aquí está mi código, ¿puede alguien echar un vistazo y hacerme saber dónde me estoy equivocando?

dejar
GetUserDetail = (Ruta)=>
dejar
Source = Json.Document(Web.Contents(Path)),
NextList= @Source[valor],
nextpage = Path & "&" & Text.AfterDelimiter(@Source[odata.nextLink],"?"),
resultado = pruebe @NextList y @GetUserDetail(@nextpage) de lo contrario @NextList

en

resultado

UserDetail = GetUserDetail("https://graph.windows.net/mydomain.com/users?api-version=1.6&$top=10"),
#"Convertido a tabla" = Table.FromList(UserDetail, Splitter.SplitByNothing(), null, null, ExtraValues.Error)

en

#"Convertido a tabla"

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

También traté de hacer que esto funcionara en el pasado.

Y mi solución fue exportar los datos de azure a un archivo csv mediante Powershell y, a continuación, conectar power bi a este archivo csv. A continuación, programe el script de PowerShell para que se ejecute cuando sea necesario desde el programador de tareas. Pero podría haber una manera más fácil que aún no he encontrado.

En mi script de Powershell exporto signinactivity para los usuarios. Debajo del script que uso para esto. Tal vez esto pueda ayudarte

<#
.SYNOPSIS
Export Azure AD SignInActivity
.DESCRIPTION
Connect to App registrations and Export Azure AD SignInActivity
#>
 
# Application (client) ID, Directory (tenant) ID, and secret
$clientID = "*****************************"
$tenantName = "************.onmicrosoft.com"
$ClientSecret = "*****************"
$resource = "https://graph.microsoft.com/"
 
$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 
 
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
 
# Get all users in source tenant
$uri = 'https://graph.microsoft.com/beta/users?$select=displayName,userPrincipalName,signInActivity,extension_**********_ABC,identities'
 
# If the result is more than 999, we need to read the @odata.nextLink to show more than one side of users
$Data = while (-not [string]::IsNullOrEmpty($uri)) {
    # API Call
    $apiCall = try {
        Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $uri -Method Get
    }
    catch {
        $errorMessage = $_.ErrorDetails.Message | ConvertFrom-Json
    }
    $uri = $null
    if ($apiCall) {
        # Check if any data is left
        $uri = $apiCall.'@odata.nextLink'
        $apiCall
    }
}
 
# Set the result into an variable
$result = ($Data | select-object Value).Value
$Export = $result | select DisplayName,UserPrincipalName,@{n="LastLoginDate";e={$_.signInActivity.lastSignInDateTime}},@{n="Email";e={$_.identities.issuerAssignedId}},extension_**********_ABC,identities
 
## [datetime]::Parse('2020-04-07T16:55:35Z')

$Date = Get-Date

$Export | export-csv -Path C:\temp\audit1.csv -NoTypeInformation

View solution in original post

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

También traté de hacer que esto funcionara en el pasado.

Y mi solución fue exportar los datos de azure a un archivo csv mediante Powershell y, a continuación, conectar power bi a este archivo csv. A continuación, programe el script de PowerShell para que se ejecute cuando sea necesario desde el programador de tareas. Pero podría haber una manera más fácil que aún no he encontrado.

En mi script de Powershell exporto signinactivity para los usuarios. Debajo del script que uso para esto. Tal vez esto pueda ayudarte

<#
.SYNOPSIS
Export Azure AD SignInActivity
.DESCRIPTION
Connect to App registrations and Export Azure AD SignInActivity
#>
 
# Application (client) ID, Directory (tenant) ID, and secret
$clientID = "*****************************"
$tenantName = "************.onmicrosoft.com"
$ClientSecret = "*****************"
$resource = "https://graph.microsoft.com/"
 
$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 
 
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
 
# Get all users in source tenant
$uri = 'https://graph.microsoft.com/beta/users?$select=displayName,userPrincipalName,signInActivity,extension_**********_ABC,identities'
 
# If the result is more than 999, we need to read the @odata.nextLink to show more than one side of users
$Data = while (-not [string]::IsNullOrEmpty($uri)) {
    # API Call
    $apiCall = try {
        Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $uri -Method Get
    }
    catch {
        $errorMessage = $_.ErrorDetails.Message | ConvertFrom-Json
    }
    $uri = $null
    if ($apiCall) {
        # Check if any data is left
        $uri = $apiCall.'@odata.nextLink'
        $apiCall
    }
}
 
# Set the result into an variable
$result = ($Data | select-object Value).Value
$Export = $result | select DisplayName,UserPrincipalName,@{n="LastLoginDate";e={$_.signInActivity.lastSignInDateTime}},@{n="Email";e={$_.identities.issuerAssignedId}},extension_**********_ABC,identities
 
## [datetime]::Parse('2020-04-07T16:55:35Z')

$Date = Get-Date

$Export | export-csv -Path C:\temp\audit1.csv -NoTypeInformation

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors