Public/Deploy.ps1

Function Deploy {
    <#
    .SYNOPSIS
        Specify deployment details in a PSDeploy.ps1

    .DESCRIPTION
        Specify deployment details in a PSDeploy.ps1

        You may specify multiple Deploy blocks in a single PSDeploy.ps1, as long as their names are unique.

        This is not intended to be used anywhere but in a *.PSDeploy.ps1 file. It is included here for intellisense support

    .PARAMETER Name
        A name for the deployment in a PSDeploy.ps1 file.

        If not specified, we generate and use a GUID.

        Get-PSDeployment will generate a new GUID each run,
        if you need to refer to the deployment in any consistent way,
        be sure to name it with this parameter.

    .PARAMETER Script
        Details on the deployment. You can include the following functions inside your Deploy scriptblock:
            - By: Deployment definitions for a particular DeploymentType

    .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
        By

    .LINK
        To

    .LINK
        FromSource

    .LINK
        Tagged

    .LINK
        WithOptions

    .LINK
        DependingOn

    .LINK
        Get-PSDeployment

    .LINK
        Get-PSDeploymentType

    .LINK
        Get-PSDeploymentScript
    #>

    [cmdletbinding(DefaultParameterSetName = 'NoName')]
    param(
        [parameter( ParameterSetName = 'Name',
                    Position = 0,
                    Mandatory = $False)]
        [string]$Name,

        [parameter( ParameterSetName = 'Name',
                    Position = 1,
                    Mandatory = $True)]
        [parameter( ParameterSetName = 'NoName',
                    Position = 0,
                    Mandatory = $True)]
        [scriptblock]$Script

    )
    if($PSCmdlet.ParameterSetName -eq 'NoName')
    {
        [string]$Name = $( [guid]::NewGuid().Guid )
    }
    $Script:ThisDeployment = @{
        DeploymentName = $Name
    }

    . $Script
}