Public/Get-GAWebUser.ps1
|
<#
.SYNOPSIS Retrieves one or more GoAnywhere Web Users. .DESCRIPTION Queries the GoAnywhere REST API for a specific Web User or all Web Users if no username is provided. Returns an [xml] object representing the Web User, an array of [xml] objects for multiple users, or $null if the user is not found or no users exist. .PARAMETER Client A GoAnywhere client object returned by New-GAClient. .PARAMETER Username The Web User's username. If omitted, retrieves all Web Users. .EXAMPLE Get-GAWebUser -Client $client -Username "user1" .EXAMPLE Get-GAWebUser -Client $client #> function Get-GAWebUser { [CmdletBinding()] param ( [Parameter(Mandatory)][PSObject]$Client, [string]$Username ) $baseUri = $Client.BaseUri.TrimEnd('/') $uri = if ($Username) { "$baseUri/webusers/$([System.Web.HttpUtility]::UrlEncode($Username))" } else { "$baseUri/webusers" } Write-Verbose "Requesting Web User data from $uri" try { $response = Invoke-WebRequest -Uri $uri -Method Get -Headers $Client.Header -ErrorAction Stop Write-Verbose "Received HTTP $($response.StatusCode) response" Write-Verbose "Response content length: $($response.Content.Length) bytes" [xml]$xmlResponse = $response.Content $users = @($xmlResponse.webUsers.webUser) if ($users.Count -eq 0) { Write-Verbose "No Web Users found." return $null } elseif ($users.Count -eq 1) { Write-Verbose "Found Web User '$Username'" return $users[0] } else { Write-Verbose "Found $($users.Count) Web Users" return $users } } catch { $statusCode = $null if ($_.Exception.Response -and $_.Exception.Response.StatusCode) { try { $statusCode = [int]$_.Exception.Response.StatusCode } catch {} } Write-Verbose "Caught exception. Status code: $statusCode. Message: $($_.Exception.Message)" if ($statusCode -in 401,404) { Write-Verbose "Web User '$Username' not found (401/404). Returning `$null." return $null } throw "Failed to retrieve Web User(s): $($_.Exception.Message)" } } |