Public/Users/Set-R1FIDUser.ps1
|
# .ExternalHelp psRadiantOne-help.xml function Set-R1FIDUser { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] [OutputType([void])] param( [parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateNotNullOrEmpty()] [ValidatePattern('^[a-zA-Z0-9_-]+$')] [string]$username, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [bool]$active, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $false )] [securestring]$password, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [ValidateLength(0, 1000)] [string]$firstName, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [ValidateLength(0, 1000)] [string]$lastName, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [ValidateLength(0, 10000)] [string]$email, [parameter( Mandatory = $false, ValueFromPipelineByPropertyName = $true )] [string[]]$roles ) Begin { Assert-R1Session -RequireToken }#begin Process { $URI = Resolve-R1ServiceUrl -Service Auth -Path "users/$($username | Get-EscapedString)" #The control panel updates a user by sending back the complete object it retrieved, including #the properties the api maintains itself. Do the same, so that a property left unspecified #keeps its current value instead of relying on the endpoint to merge. $Existing = Get-R1FIDUser -username $username $Template = [ordered]@{ username = $username firstName = $null lastName = $null entryDn = $null email = $null active = $true roles = @() server = $null organization = $null createdOn = $null assumeRole = $null } $Request = Merge-R1Parameter -Template $Template -BoundParameter ($PSBoundParameters | Get-Parameter -ParametersToRemove password) -Fallback $Existing if ($PSBoundParameters.ContainsKey('roles')) { $Request['roles'] = @($roles) } if ($PSBoundParameters.ContainsKey('password')) { #An absent password leaves the existing password unchanged $Request['password'] = $password | ConvertTo-InsecureString } $Body = $Request | ConvertTo-R1SecretBody -EmptyArrayProperty roles if ($PSCmdlet.ShouldProcess($username, 'Update FID User')) { $null = Invoke-R1RestMethod -Uri $URI -Method PUT -Body $Body } }#process End { }#end } |