Functions/Get-AGUsers.ps1
|
Function Get-AGUsers{ <# .SYNOPSIS Retrieves a list of users via MS Graph API. .DESCRIPTION Retrieves a list of users via MS Graph API. .EXAMPLE $TenantId = "c123456f-a1cd-6fv7-bh73-123r5t6y7u8i9" $ClientId = '1a2s3d4d4-dfhg-4567-d5f6-h4f6g7k933ae' $ClientSecret = '36._ERF567.6FB.XFGY75D-35TGasdrvk467' $AccessToken = Get-AGGraphAccessToken -TenantID $TenantID -ClientID $ClientId -ClientSecret $ClientSecret Get-AGUsers -AccessToken $AccessToken This command first gets an access token, which is used to grant access to Graph, and then a list of users is retrieved. .EXAMPLE Get-AGUsers -UPN Lars.Panzerbjrn@centralindustrial.eu This command retrieves a single user's details by user principal name. .EXAMPLE Get-AGUsers -UserType guest This command will retrieve a list of guest users. .PARAMETER AccessToken This is the access token that grants you access to Microsoft Graph. If omitted, the function uses the module-scoped token created by Get-AGGraphAccessToken or Get-AGGraphAccessTokenFromAz. .PARAMETER UserPrincipalName This is the UserPrincipalName of the user, for example Lars.Panzerbjrn@centralindustrial.eu. This would be used if you want to look for a specific user. .PARAMETER UserType This is the type of user to look for, for example Guest or Member. .PARAMETER UseBetaAPI This will force use of the beta version of the API, which sometimes will give more information, and sometimes will be broken. As with all other "beta things" use with caution. Or reckless abandon. Be yourself. .INPUTS None. You cannot pipe input to this function. .OUTPUTS A collection of user objects, or a single user object when -UserPrincipalName is used. .NOTES Author: Lars Panzerbjørn Creation Date: 2021.08.24 #> [CmdletBinding(PositionalBinding=$False)] param ( [Parameter()][psobject]$AccessToken, [Parameter()] [Alias('UPN')] [string]$UserPrincipalName, [Parameter()][string]$UserType, [Parameter()][switch]$UseBetaAPI ) BEGIN{ IF (($AccessToken) -or ($TokenResponse)){ IF($AccessToken){$Headers = @{Authorization = "Bearer $($AccessToken.access_token)"}} IF(!($AccessToken)){$Headers = @{Authorization = "Bearer $($TokenResponse.access_token)"}} } ELSE {THROW "Please provide access token"} IF($UseBetaAPI){$Version = "/beta"} Else{$Version = "/v1.0"} $URI = $BaseURI + $Version IF($UserPrincipalName){ $URI = $URI + "/users/$($UserPrincipalName)" } ELSEIF($UserType){ $URI = $URI + "/users?`$filter=userType eq '$UserType'" } ELSE{ $URI = $URI + "/users" } } PROCESS{ $Result = Invoke-RestMethod -Uri $URI -Headers $Headers IF(!$UserPrincipalName){ $Resources = $Result.value IF (!([string]::IsNullOrEmpty($Result.'@odata.nextLink'))){ $Page = 1 DO{ Write-Verbose "Page $($Page)" $URI = $Result.'@odata.nextLink' $Result = Invoke-RestMethod -Uri $URI -Headers $Headers $Resources += $Result.value Write-Verbose "There are $($Resources.count) resources" $Page++ #Sleep -s 1 } UNTIL ($Result.'@odata.nextLink' -eq $Null) } Write-Verbose "There are $($Resources.count) resources" } Else{ $Resources = $Result } } END{ Return $Resources } } |