Public/Users/Get-MMUser.ps1
|
# Получение пользователя MatterMost по ID, username, фильтру или текущей сессии function Get-MMUser { <# .SYNOPSIS Возвращает пользователя MatterMost по ID, username, фильтру или текущей сессии. .EXAMPLE Get-MMUser -All .EXAMPLE Get-MMUser -Me .EXAMPLE Get-MMUser -Username "testuser" .EXAMPLE Get-MMUser -UserId "abc123" .EXAMPLE Get-MMUser -Filter {username -eq 'admin'} .EXAMPLE Get-MMUser -Filter {username -like 'adm*'} .EXAMPLE Get-MMUser -Filter {username -ne 'admin'} .EXAMPLE $user | Get-MMUser #> [CmdletBinding(DefaultParameterSetName = 'Me')] param( [Parameter(ParameterSetName = 'All')] [switch]$All, [Parameter(ParameterSetName = 'Me')] [switch]$Me, [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)] [Alias('id')] [string]$UserId, [Parameter(Mandatory, ParameterSetName = 'ByUsername', Position = 0)] [string]$Username, [Parameter(Mandatory, ParameterSetName = 'ByEmail')] [string]$Email, [Parameter(Mandatory, ParameterSetName = 'Filter')] [scriptblock]$Filter ) process { $typeName = 'MatterMost.User' switch ($PSCmdlet.ParameterSetName) { 'All' { Get-MMUserList | Add-MMTypeName -TypeName $typeName } 'Me' { Invoke-MMRequest -Endpoint 'users/me' | Add-MMTypeName -TypeName $typeName } 'ById' { Invoke-MMRequest -Endpoint "users/$UserId" | Add-MMTypeName -TypeName $typeName } 'ByUsername' { Invoke-MMRequest -Endpoint "users/username/$Username" | Add-MMTypeName -TypeName $typeName } 'ByEmail' { Invoke-MMRequest -Endpoint "users/email/$Email" | Add-MMTypeName -TypeName $typeName } 'Filter' { Invoke-MMUserFilter -Filter $Filter | Add-MMTypeName -TypeName $typeName } } } } function Invoke-MMUserFilter { <# .SYNOPSIS Парсит ScriptBlock фильтра и возвращает пользователей MatterMost по условию. #> param([scriptblock]$Filter) $filterStr = $Filter.ToString().Trim() if ($filterStr -notmatch "^(\w+)\s+(-eq|-like|-ne)\s+['""]([^'""]+)['""]$") { throw "Invalid filter syntax. Supported: {field -eq 'value'}, {field -like 'value'}, {field -ne 'value'}" } $field = $Matches[1] $operator = $Matches[2] $value = $Matches[3] # Быстрый путь: username -eq через прямой endpoint if ($field -eq 'username' -and $operator -eq '-eq') { return Invoke-MMRequest -Endpoint "users/username/$value" } # Для -ne нужны все пользователи if ($operator -eq '-ne') { $users = Get-MMUserList return $users | Where-Object { $_.$field -ne $value } } # Для -eq и -like используем search + клиентская фильтрация $searchResults = Invoke-MMRequest -Endpoint 'users/search' -Method POST -Body @{ term = $value; limit = 100 } switch ($operator) { '-eq' { $searchResults | Where-Object { $_.$field -eq $value } } '-like' { $searchResults | Where-Object { $_.$field -like $value } } } } |