Private/Get-OriAzBopVersionParamHelper.ps1

<#
.SYNOPSIS
    Get module into Version param structure
 
.PARAMETER Module
    Informations about required module
 
.EXAMPLE
Get-OriAzBopVersionParamHelper `
-Module @{'ModuleA',@{ModuleName='ModuleB';Guid=123;MaximumVersion='1.0.10';ModuleVersion='1.0.3';Version='1.0.2';PreRelease='pre06';AllowPrerelease='1'}}
 
#>

function Get-OriAzBopVersionParamHelper {
    [CmdLetBinding()]
    [OutputType([Hashtable])]
    param (        
        [Parameter(Mandatory = $true, HelpMessage = "Informations about required module")]
        $Module
    )
    $ErrorActionPreference = 'Stop'    
    Write-Verbose -Message ("[ START: {0}:{1} (v.{2}) ]" -f $Local:MyInvocation.MyCommand.Source, $Local:MyInvocation.MyCommand.Name, $Local:MyInvocation.MyCommand.Version)
    foreach ($arg in $PSBoundParameters.GetEnumerator()) {
        if ([string]::IsNullOrEmpty($arg.Value)) {
            Write-Debug -Message ("[null] {0}: {1}" -f $arg.Key, $arg.Value) -ErrorAction SilentlyContinue 
        }
        else {
            Write-Debug -Message ("[{2}] {0}: {1}" -f $arg.Key, $arg.Value, $arg.Value.GetType().Name) -ErrorAction SilentlyContinue 
        }
    }
    Write-Debug "Module: $(ConvertTo-Json $Module)"
    # There can be in RequiredModules string or in ModuleVersion type
    # See possible parameters for parse
    # https://docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.modulespecification?view=pscore-6.2.0#properties
    [Hashtable] $toReturn = @{}
    if ('System.String' -eq $Module.getType().fullname) {
        $toReturn += @{Name = $Module }
    }
    else {
        # The type of $Module is most likely ModuleSpecification represent by HashTable at the moment.
        $toReturn += @{Name = $Module.ModuleName }
        if (![string]::IsNullOrEmpty($Module.Guid)) {
            $toReturn += @{Guid = $Module.Guid }
        }
        if (![string]::IsNullOrEmpty($Module.MaximumVersion)) {
            $toReturn += @{MaximumVersion = $Module.MaximumVersion }
        }
        if (![string]::IsNullOrEmpty($Module.ModuleVersion)) {
            # Only when is set RequiredVersion we do need add Prefix into Import-Module paramters
            $toReturn += @{RequiredVersion = $Module.ModuleVersion }
        }
        if (![string]::IsNullOrEmpty($Module.Version)) {
            $toReturn += @{Version = $Module.Version }
        }
        if (![string]::IsNullOrEmpty($Module.PreRelease)) {
            $toReturn += @{PreRelease = $Module.PreRelease }
        }
        if (![string]::IsNullOrEmpty($Module.AllowPrerelease)) {
            $toReturn += @{AllowPrerelease = $Module.AllowPrerelease }
        }
    }
    Write-Debug (ConvertTo-Json -InputObject $toReturn)
    Write-Verbose -Message ("[ END: {0} ]" -f $Local:MyInvocation.MyCommand.Name)
    return $toReturn
}