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
    #>

    [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

}