DSCResources/ROSSCommon/Src/Assert-RequiredParameterCollection.ps1


function Assert-RequiredParameterCollection {
<#
    .SYNOPSIS
        Asserts that a $PSBoundParameters collection does or does not contain some parameter
        names. This implements parameters set enforcement for DSC resources.
#>

    [CmdletBinding()]
    param (
        ## Specifies a PSBoundParametersDictionary collection containing the parameters to validate.
        [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        [System.Collections.Hashtable] $ParameterCollection,

        ## Specifies a list of parameter names that are required to be in the collection.
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [AllowEmptyCollection()]
        [System.String[]] $RequiredParameterName,

        ## Version/verbose information string appended to the end of generated error messages.
        [Parameter(ValueFromPipelineByPropertyName)]
        [System.String] $AppendString
    )
    process {

        $missingRequiredParameters = @( );
        foreach ($parameterName in $RequiredParameterName) {
 
            if (-not $ParameterCollection.ContainsKey($parameterName)) {

                $missingRequiredParameters += $parameterName;
            }
        }

        if ($missingRequiredParameters.Count -gt 0) {

            $missingParametersString = $missingRequiredParameters -join "', '";
            $missingParametersErrorString = $localizedData.MissingRequiredParametersError -f $missingParametersString;

            if ($PSBoundParameters.ContainsKey('AppendString')) {

                $missingParametersErrorString = $missingParametersErrorString.Trim('.');
                $missingParametersErrorString = '{0} {1}.' -f $missingParametersErrorString, $AppendString;

            }
                
            throw $missingParametersErrorString;             
        
        }

    } #end process
} #end function