private/Build-AtomicParsleyParameterList.ps1

function Build-AtomicParsleyParameterList {
    <#
    .DESCRIPTION
        Creates a list of AtomicParsley parameters based on a collection of atoms.

    .OUTPUTS
        Array of strings containing the parameters to be passed to AtomicParsley.

    .PARAMETER Atoms
        REQUIRED. Hashtable. Alias: -a. A Hashtable containing a set of metadata / atoms.

    .PARAMETER IgnoreList
        OPTIONAL. Array of String. Alias: -i. A list of parameter names to ignore when creating the parameter list.

    .EXAMPLE
        Build-AtomicParsleyParameterList -Atoms $atoms -IgnoreList @('RawAtomData')

    #>

    [OutputType([String[]])]
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)] [Alias('a')] [Hashtable] $Atoms,
        [Parameter()]          [Alias('i')] [String[]] $IgnoreList
    )

    process {

        try {

            Write-Msg -FunctionCall -IncludeParameters

            if ( $null -ne $Atoms ) {

                [String[]] $parameters = @() 
                $Atoms.Keys | Where-Object { $_ -notin $ignoreList } | 
                    ForEach-Object {
                    
                        $parameter = $null
                        $propertyName = $_
                        $parameterName, $dataType = Find-ParameterFromPropertyName -n $propertyName -d
                        
                        if ( $dataType -ne 'WriteNotSupported' ) {

                            $propertyValue = switch ( $dataType ) {
                                "string"         { '"' + ($Atoms[$propertyName]).Replace('"','""').Replace('$','`$') + '"'     }
                                "url"            { '"' + $Atoms[$propertyName] + '"'                         }
                                "numberOfnumber" { $Atoms[$propertyName].Replace(' of ','/').Replace(' ','') }
                                "datetime"       { '"' + $(ConvertTo-UTCstring($Atoms[$propertyName])) + '"' }
                                default          { $Atoms[$propertyName]                                     }
                            }

                            if ( $parameterName.StartsWith('name=') ) {
                                if ( $parameterName -like "* domain=com.apple.iTunes" ) {
                                    $parameter = '--rDNSatom ' + $propertyValue + ' ' + $parameterName
                                } else {
                                    $parameter = '--rDNSatom ' + '""' + ' ' + $parameterName + ' ' +
                                                 '--rDNSatom ' + $propertyValue + ' ' + $parameterName
                                }
                            }
                            elseif ( $parameterName -eq 'artwork' ) {
                                if ( $propertyValue -notlike "*piece*of artwork*" ) {
                                    $parameter = '--artwork REMOVE_ALL --artwork ' + $propertyValue
                                }
                            }
                            else {
                                $parameter = '--' + $parameterName + ' ' + $propertyValue
                            }

                            if ( $null -ne $parameter ) { $parameters += $parameter }
                        
                        }

                    }

            }

        }
        catch {
            Write-Msg -x -o $_
        }

        Write-Msg -FunctionResult -m $( 'Parameters: ' ) -o $($parameters | ConvertTo-JSON)

        return  $parameters

    }
    
}