Public/WithOptions.ps1

Function WithOptions {
    <#
    .SYNOPSIS
        Specify options for a DeploymentType
 
    .DESCRIPTION
        Specify options for a DeploymentType. This includes both DeploymentOptions and DeploymentParameters.
 
        These are passed directly to the DeploymentType script in two was:
            - They are splatted against the script*
            - The are included in the $Deployment.DeploymentOptions property
 
        * If a parameter is not valid, it is removed before splatting, but still available in DeploymentOptions
 
        See Get-PSDeploymentType for details on different DeploymentTypes,
        and Get-PSDeploymentType -DeploymentType <Type> -ShowHelp to see the parameters they accept
 
        This is not intended to be used anywhere but in a *.PSDeploy.ps1 file. It is included here for intellisense support
 
    .PARAMETER Options
        Accepts a hashtable of options
 
    .EXAMPLE
 
        # This is a complete PSDeploy.ps1 example including a By function
 
        Deploy DeployMyModule
            By FileSystem {
                FromSource 'MyModule'
                To 'C:\sc\MyModule'
                WithOptions @{
                    Mirror = $True
                }
            }
        }
 
        # This would deploy the folder 'MyModule' to C:\sc\MyModule. It would mirror (i.e. remove items that are not in the source)
 
    .EXAMPLE
 
        # This is a complete PSDeploy.ps1 example including a By function
 
        Deploy DeployMyModule
            By FileSystem {
                FromSource 'MyModule'
                To 'C:\sc\MyModule'
                WithOptions @{
                    Mirror = $True
                }
            }
 
            By FileSystem Tasks {
                FromSource 'Tasks'
                To 'C:\sc\Tasks'
            }
        }
 
        # This illustrates using two of the same DeploymentTypes, with different options and details.
        # We specify a name to ensure uniqueness of the resulting DeploymentName: DeployMyModule and DeployMyModule-Tasks
        # This would deploy the folder 'MyModule' to C:\sc\MyModule. It would mirror (i.e. remove items that are not in the source)
        # This would deploy the folder Tasks to C:\sc\Tasks, without mirroring.
 
    .LINK
        about_PSDeploy
 
    .LINK
        about_PSDeploy_Definitions
 
    .LINK
        https://github.com/RamblingCookieMonster/PSDeploy
 
    .LINK
        Deploy
 
    .LINK
        By
 
    .LINK
        To
 
    .LINK
        FromSource
 
    .LINK
        Tagged
 
    .LINK
        DependingOn
 
    .LINK
        Get-PSDeployment
 
    .LINK
        Get-PSDeploymentType
 
    .LINK
        Get-PSDeploymentScript
    #>

    [cmdletbinding()]
    param(
        [parameter( Position = 0,
                    Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True)]
        [System.Collections.Hashtable]$Options
    )
    begin
    {
        $All = @{}
    }
    Process
    {
        $All += $Options
    }
    end
    {
        $Script:ThisBy.DeploymentOptions = $All
    }
}