private/Test-KPIsValidGroup.ps1

Function Test-KPIsValidGroup {
<#
    .SYNOPSIS
        Check to see if an impit object is a valid KeePass group
 
    .DESCRIPTION
        Check to see if an impit object is a valid KeePass group. Returns the KeePass PwGroup object is valid
 
    .PARAMETER KeePassDatabase
        Specifies the KeePass database object to search
 
    .PARAMETER InputObject
        Specifies the object to check.
 
    .EXAMPLE
        Test-KPIsValidGroup -KeePassDatabase $KeePassDatabase -InputObject 'New Group 2'
 
    .EXAMPLE
        Test-KPIsValidGroup -KeePassDatabase $KeePassDatabase -InputObject '/Homebanking/New Group'
 
    .NOTES
        For additional information please see my GitHub wiki page
 
    .LINK
        https://github.com/My-Random-Thoughts/PowerShellKeePass
#>


    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [KeePassLib.PwDatabase]$KeePassDatabase,

        [Parameter(Mandatory = $true)]
        [object]$InputObject
    )

    Begin {
        If ($KeePassDatabase.IsOpen -eq $false) {
            Throw 'The KeePass database specified is not open'
        }

        If ($InputObject -eq '/') { $InputObject = $KeePassDatabase.RootGroup }
    }

    Process {
        Switch ($InputObject.GetType().Name) {
            'PwGroup' {
                Return $InputObject
            }

            'PwUuid' {
                [KeePassLib.PwGroup]$getUuid = ($KeePassDatabase.RootGroup.FindGroup($InputObject, $true))
                If (-not [string]::IsNullOrEmpty($getUuid)) {
                    Write-Verbose -Message 'Found valid entry using Uuid'
                    Write-Verbose "> $(($getUuid).Uuid.UuidBytes)"
                    Return ($getUuid -as [KeePassLib.PwGroup])
                }
                Else {
                    Throw 'Could not find a match for given uuid'
                }
            }

            'string' {
                $getName = @(Get-KeePassGroup -KeePassDatabase $KeePassDatabase -Name $InputObject -AsObject)
                $getPath = @(Get-KeePassGroup -KeePassDatabase $KeePassDatabase -Path $InputObject -AsObject)

                If ($getName.Count -eq 1) {
                    Write-Verbose -Message 'Found valid group using name'
                    Return ($getName[0] -as [KeePassLib.PwGroup])
                }
                ElseIf ($getPath.Count -eq 1) {
                    Write-Verbose -Message 'Found valid group using path'
                    Return ($getPath[0] -as [KeePassLib.PwGroup])
                }
                Else {
                    Throw 'Could not find exact match for given group name or path'
                }
            }

            Default {
                Throw "Unknown Type: $($InputObject.GetType().Name)"
            }
        }
    }

    End {
    }
}