functions/SPClientUser/Get-SPClientUser.ps1

#Requires -Version 3.0

<#
  Get-SPClientUser.ps1
 
  Copyright (c) 2017 karamem0
 
  This software is released under the MIT License.
  https://github.com/karamem0/SPClient/blob/master/LICENSE
#>


function Get-SPClientUser {

<#
.SYNOPSIS
  Gets one or more users.
.DESCRIPTION
  The Get-SPClientUser function lists all site users or retrieves the specified site user.
  If not specified filterable parameter, returns site all users.
  Otherwise, returns a user which matches the parameter.
.PARAMETER ClientContext
  Indicates the client context. If not specified, uses a default context.
.PARAMETER NoEnumerate
  If specified, suppresses enumeration in output.
.PARAMETER Identity
  Indicates the user ID.
.PARAMETER Name
  Indicates the user login name.
.PARAMETER Email
  Indicates the user E-mail.
.PARAMETER Current
  If specified, returns current user.
.PARAMETER Retrieval
  Indicates the data retrieval expression.
.EXAMPLE
  Get-SPClientUser
.EXAMPLE
  Get-SPClientUser -Identity 7
.EXAMPLE
  Get-SPClientUser -Name "i:0#.f|membership|admin@example.com"
.EXAMPLE
  Get-SPClientUser -Email "admin@example.com"
.EXAMPLE
  Get-SPClientUser -Retrieval "Title"
.INPUTS
  None
.OUTPUTS
  Microsoft.SharePoint.Client.User[]
.LINK
  https://github.com/karamem0/SPClient/blob/master/doc/Get-SPClientUser.md
#>


    [CmdletBinding(DefaultParameterSetName = 'All')]
    param (
        [Parameter(Mandatory = $false)]
        [Microsoft.SharePoint.Client.ClientContext]
        $ClientContext = $SPClient.ClientContext,
        [Parameter(Mandatory = $false, ParameterSetName = 'All')]
        [switch]
        $NoEnumerate,
        [Parameter(Mandatory = $true, ParameterSetName = 'Identity')]
        [int]
        $Identity,
        [Parameter(Mandatory = $true, ParameterSetName = 'Name')]
        [Alias('LoginName')]
        [string]
        $Name,
        [Parameter(Mandatory = $true, ParameterSetName = 'Email')]
        [string]
        $Email,
        [Parameter(Mandatory = $true, ParameterSetName = 'Current')]
        [switch]
        $Current,
        [Parameter(Mandatory = $false)]
        [string]
        $Retrieval
    )

    process {
        if ($ClientContext -eq $null) {
            throw "Cannot bind argument to parameter 'ClientContext' because it is null."
        }
        $ClientObjectCollection = $ClientContext.Site.RootWeb.SiteUsers
        if ($PSCmdlet.ParameterSetName -eq 'All') {
            Invoke-ClientContextLoad `
                -ClientContext $ClientContext `
                -ClientObject $ClientObjectCollection `
                -Retrieval $Retrieval
            Write-Output $ClientObjectCollection -NoEnumerate:$NoEnumerate
        }
        if ($PSCmdlet.ParameterSetName -eq 'Identity') {
            $PathMethod = New-Object Microsoft.SharePoint.Client.ObjectPathMethod( `
                $ClientContext, `
                $ClientObjectCollection.Path, `
                'GetById', `
                [object[]]$Identity)
            $ClientObject = New-Object Microsoft.SharePoint.Client.User($ClientContext, $PathMethod)
            Invoke-ClientContextLoad `
                -ClientContext $ClientContext `
                -ClientObject $ClientObject `
                -Retrieval $Retrieval
            Write-Output $ClientObject
            trap {
                throw 'The specified user could not be found.'
            }
        }
        if ($PSCmdlet.ParameterSetName -eq 'Name') {
            $PathMethod = New-Object Microsoft.SharePoint.Client.ObjectPathMethod( `
                $ClientContext, `
                $ClientObjectCollection.Path, `
                'GetByLoginName', `
                [object[]]$Name)
            $ClientObject = New-Object Microsoft.SharePoint.Client.User($ClientContext, $PathMethod)
            Invoke-ClientContextLoad `
                -ClientContext $ClientContext `
                -ClientObject $ClientObject `
                -Retrieval $Retrieval
            Write-Output $ClientObject
            trap {
                throw 'The specified user could not be found.'
            }
        }
        if ($PSCmdlet.ParameterSetName -eq 'Email') {
            $PathMethod = New-Object Microsoft.SharePoint.Client.ObjectPathMethod( `
                $ClientContext, `
                $ClientObjectCollection.Path, `
                'GetByEmail', `
                [object[]]$Email)
            $ClientObject = New-Object Microsoft.SharePoint.Client.User($ClientContext, $PathMethod)
            Invoke-ClientContextLoad `
                -ClientContext $ClientContext `
                -ClientObject $ClientObject `
                -Retrieval $Retrieval
            Write-Output $ClientObject
            trap {
                throw 'The specified user could not be found.'
            }
        }
        if ($PSCmdlet.ParameterSetName -eq 'Current') {
            $ClientObject = $ClientContext.Site.RootWeb.CurrentUser
            Invoke-ClientContextLoad `
                -ClientContext $ClientContext `
                -ClientObject $ClientObject `
                -Retrieval $Retrieval
            Write-Output $ClientObject
            trap {
                throw 'The specified user could not be found.'
            }
        }
    }

}