Private/Register-ISPlugins.ps1

<#
.SYNOPSIS
    Searches a list of directories for valid plugins
.DESCRIPTION
    The Register-ISPlugins cmdlet will traverse a list of directories and output a list of plugin objects.
.EXAMPLE
    Register-ISPlugins -PluginStorePath "C:\Temp"
.PARAMETER Plugins
    A list of directories to load plugins from
.INPUTS
    System.String
.OUTPUTS
    PSObject
#>

function Register-ISPlugins
{
    param (
        # Specifies a path to one or more locations containing plugins
        [Parameter(
            Mandatory = $true,
            Position = 0)]
        [ValidateNotNullOrEmpty()]
        [ValidateScript( {Test-Path $_ -IsValid})]
        [Alias("Path")]
        [string[]]$PluginStorePath
    )


    $PluginStoreContents = Get-ChildItem -Path $PluginStorePath -Filter "*-plugin.psm1" -File

    foreach ($PluginFile in $PluginStoreContents)
    {
        Write-Verbose "Found plugin $($PluginFile.Name)"

        $Properties = @{
            "Path" = $PluginFile.FullName
            "Name" = ($PluginFile.Name -replace "([0-9A-Za-z\-]+\-plugin)\.psm1", '$1')
        }

        New-Object PSObject -Property $Properties
    }
}