Functions/Search-LSUsers.ps1


function Search-LSUsers {
    
    Param (
        [Parameter(Mandatory=$true)]
        [String]$Url,

        [Int]$MaxResults,
        [String]$Email,
        [String]$Name,
        [String]$Upn,
        [String]$Username,
        [String]$UserDomain,
        [String]$Description,
        [String]$Address,
        [String]$Telephone,
        [String]$Mobile,
        [String]$Fax,
        [String]$Company,
        [String]$Department
    )
    
    # URL parameter build with used filters only
    $params = @{
        action   = 'SearchUsers'
    }
    if($MaxResults)  {$params.MaxResults  = $MaxResults}
    if($Email)       {$params.Email       = $Email}
    if($Name)        {$params.Name        = $Name}
    if($Upn)         {$params.Upn         = $Upn}
    if($Username)    {$params.Username    = $Username}
    if($UserDomain)  {$params.UserDomain  = $UserDomain}
    if($Description) {$params.Description = $Description}
    if($Address)     {$params.Address     = $Address}
    if($Telephone)   {$params.Telephone   = $Telephone}
    if($Mobile)      {$params.Mobile      = $Mobile}
    if($Fax)         {$params.Fax         = $Fax}
    if($Company)     {$params.Company     = $Company}
    if($Department)  {$params.Department  = $Department}
    
    # Building query string
    $queryString = ($params.GetEnumerator() | ForEach-Object {
        '{0}={1}' -f [uri]::EscapeDataString($_.Key), [uri]::EscapeDataString([string]$_.Value)
    }) -join '&'
    $fullUrl = '{0}{1}' -f $Url, $queryString
    
    # API call for user search
    $Request = Invoke-WebRequest -Uri $fullUrl -UseBasicParsing
    
    # Checking HTTP response
    if($Request.StatusCode -ne 200) {
        throw ("{0} {1}" -f $Request.StatusCode, $Request.StatusDescription)
    }
    
    # Success check
    $Data = ($Request.Content | ConvertFrom-Json)
    if(-not $Data.Success) {
        Write-Error "Search was not successful."
        return $Request
    } else {
        return $Data
    }
}