public/Get-PulpRole.ps1

# .ExternalHelp powershell-pulp-help.xml
Function Get-PulpRole {
  [Cmdletbinding(DefaultParameterSetName='Strings')]
  Param(
    [Parameter(Mandatory=$false)]
    [string]$Server = (Get-PulpLocalConfig -Server).Server,

    [Parameter(Mandatory=$false)]
    [int]$Port = (Get-PulpLocalConfig -Port).Port,

    [Parameter(Mandatory=$false)]
    [string]$Protocol = (Get-PulpLocalConfig -Protocol).Protocol,

    [Parameter(Mandatory=$false)]
    [string]$AuthenticationMethod = (Get-PulpLocalConfig -AuthenticationMethod).AuthenticationMethod,

    [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ParameterSetName="Objects")]
    [object[]]$User,

    [Parameter(Mandatory=$false, Position=0, ValueFromPipeline=$true, ParameterSetName="Strings")]
    [string[]]$Id = @('*'),

    [Parameter(Mandatory=$false, ParameterSetName="Strings")]
    [string]$DisplayName = '*',

    [Parameter(Mandatory=$false, ParameterSetName="Strings")]
    [string]$Description = '*'
  )
  Begin {
    $uri = "/pulp/api/v2/roles/"
    $roles = Invoke-PulpRestMethod -Server $Server -Port $Port `
      -Protocol $Protocol -AuthenticationMethod $AuthenticationMethod -Uri $uri
    $matchedRoles = @()
  }
  Process {
    If ($User){
      Foreach ($u in $User){
        $matchedRoles += ($roles | Where-Object { $_.users -contains $u.login })
      }
    } Else {
      Foreach ($i in $Id) {
        $matchedRoles += ($roles | Where-Object {
          ($_.id -like $i) -and ($_.display_name -like $DisplayName) `
                           -and ($_.description -like $Description)})
      }
    }
  }
  End {
    $matchedRoles | Select-Object * -Unique | Sort-Object id
  }
}