Functions/User/Set-PASUserPassword.ps1

function Set-PASUserPassword {
    <#
.SYNOPSIS
Updates a vault user

.DESCRIPTION
Updates an existing user in the vault

.PARAMETER id
The name of the user to update in the vault

.PARAMETER NewPassword
The password to set on the account.
Must meet the password complexity requirements

.EXAMPLE
Set-PASUserPassword -id 123 -NewPassword $SecureString

Resets password on account with id 123

.LINK
https://pspas.pspete.dev/commands/Set-PASUserPassword
#>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [int]$id,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [securestring]$NewPassword
    )

    BEGIN {
        $MinimumVersion = [System.Version]"10.10"
        Assert-VersionRequirement -ExternalVersion $Script:ExternalVersion -RequiredVersion $MinimumVersion
    }#begin

    PROCESS {

        #Get request parameters
        $boundParameters = $PSBoundParameters | Get-PASParameter -ParametersToRemove id

        $Password = ConvertTo-InsecureString -SecureString $NewPassword

        If ($Password.length -gt 39) {
            throw "Password must not exceed 39 characters"
        }

        #Include decoded password in request
        $boundParameters["NewPassword"] = $Password

        #Create URL for request
        $URI = "$Script:BaseURI/api/Users/$id/ResetPassword"

        #create request body
        $body = $boundParameters | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($id, "Reset Password")) {

            #send request to web service
            Invoke-PASRestMethod -Uri $URI -Method POST -Body $Body -WebSession $Script:WebSession

        }

    }#process

    END { }#end

}