Functions/Accounts/Unlock-PASAccount.ps1

function Unlock-PASAccount {
    <#
    .SYNOPSIS
    Checks in an exclusive account in to the Vault.

    .DESCRIPTION
    Checks in an account, locked due to an exclusive account policy, to the Vault.
    If the account is managed automatically by the CPM, after it is checked in,the password is changed immediately.
    If the account is managed manually, a notification is sent to a user who is authorised to change the password.
    The account is checked in automatically after it has been changed.
    Requires Initiate CPM password management operations on the Safe where the account is stored.

    .PARAMETER AccountID
    The unique ID of the account.
    This is retrieved by the Get-PASAccount function.

    .PARAMETER sessionToken
    Hashtable containing the session token returned from New-PASSession

    .PARAMETER WebSession
    WebRequestSession object returned from New-PASSession

    .PARAMETER BaseURI
    PVWA Web Address
    Do not include "/PasswordVault/"

    .PARAMETER PVWAAppName
    The name of the CyberArk PVWA Virtual Directory.
    Defaults to PasswordVault

    .EXAMPLE
    $token | Unlock-PASAccount -AccountID 21_3

    Will check-in exclusive access account with ID of "21_3"

    .EXAMPLE
    $token | Get-PASAccount xAccount | Unlock-PASAccount

    Will check-in exclusive access account xAccount

    .INPUTS
    SessionToken, AccountID, WebSession & BaseURI can be piped by property name

    .OUTPUTS
    None

    .NOTES
    Minimum CyberArk version 9.10

    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$AccountID,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [hashtable]$SessionToken,

        [parameter(
            ValueFromPipelinebyPropertyName = $true
        )]
        [Microsoft.PowerShell.Commands.WebRequestSession]$WebSession,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$BaseURI,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$PVWAAppName = "PasswordVault"
    )

    BEGIN {}#begin

    PROCESS {

        #Create URL for request
        $URI = "$baseURI/$PVWAAppName/API/Accounts/$AccountID/CheckIn"

        if($PSCmdlet.ShouldProcess($AccountID, "Check-In Exclusive Access Account")) {

            #send request to web service
            Invoke-PASRestMethod -Uri $URI -Method POST -Headers $SessionToken -WebSession $WebSession

        }

    }#process

    END {}#end

}