Functions/FoldersFiles/Get-PVFileCategory.ps1

Function Get-PVFileCategory {

    <#
    .SYNOPSIS
    Lists all the File Categories at both Vault and Safe level for the
    specified file or password.

    .DESCRIPTION
    Exposes the PACLI Function: "LISTFILECATEGORIES"

    .PARAMETER safe
    The name of the Safe that the File Category is attached to.

    .PARAMETER folder
    The folder containing a file with a File Category attached to it.

    .PARAMETER file
    The name of the file or password that is attached to a File Category.

    .PARAMETER category
    The name of the File Category.

    .EXAMPLE
    Get-PVFileCategory -safe DEV -folder Root -file TeamPass

    Lists file categories on file TeamPass in safe DEV.

    .NOTES
    AUTHOR: Pete Maan

    #>


    [CmdLetBinding()]
    param(

        [Parameter(
            Mandatory = $True,
            ValueFromPipelineByPropertyName = $True)]
        [Alias("Safename")]
        [string]$safe,

        [Parameter(
            Mandatory = $True,
            ValueFromPipelineByPropertyName = $True)]
        [string]$folder,

        [Parameter(
            Mandatory = $True,
            ValueFromPipelineByPropertyName = $True)]
        [Alias("Filename")]
        [string]$file,

        [Parameter(
            Mandatory = $False,
            ValueFromPipelineByPropertyName = $True)]
        [string]$category
    )

    PROCESS {

        #execute pacli
        $Return = Invoke-PACLICommand $Script:PV.ClientPath LISTFILECATEGORIES "$($PSBoundParameters | ConvertTo-ParameterString) OUTPUT (ALL,ENCLOSE)"

        if ($Return.ExitCode -eq 0) {

            #if result(s) returned
            if ($Return.StdOut) {

                #Convert Output to array
                $Results = $Return.StdOut | ConvertFrom-PacliOutput

                #loop through results
                For ($i = 0 ; $i -lt $Results.length ; $i += 3) {

                    #Get Range from array
                    $values = $Results[$i..($i + 3)]

                    #Output Object
                    [PSCustomObject] @{

                        "CategoryName"  = $values[0]
                        "CategoryValue" = $values[1]
                        "CategoryID"    = $values[2]
                        "Safename"      = $safe
                        "Folder"        = $folder
                        "Filename"      = $file

                    } | Add-ObjectDetail -TypeName pacli.PoShPACLI.File.Category

                }

            }

        }

    }

}