DscResources/SharePointProvisioning/SharePointProvisioning.schema.psm1

configuration SharePointProvisioning
{
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $FarmConfigDatabaseName,

        [Parameter(Mandatory = $true)]
        [System.String]
        $DatabaseServer,

        [Parameter()]
        [System.Boolean]
        $useSQLAuthentication,

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $DatabaseCredentials,

        [Parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $FarmAccount,

        [Parameter(Mandatory = $true)]
        [System.Management.Automation.PSCredential]
        $Passphrase,

        [Parameter(Mandatory = $true)]
        [System.String]
        $AdminContentDatabaseName,

        [Parameter(Mandatory = $true)]
        [System.Boolean]
        $RunCentralAdmin,

        [Parameter()]
        [System.String]
        $CentralAdministrationUrl,

        [Parameter()]
        [ValidateRange(1, 65535)]
        [System.UInt32]
        $CentralAdministrationPort,

        [Parameter()]
        [System.String]
        [ValidateSet("NTLM", "Kerberos")]
        $CentralAdministrationAuth,

        [Parameter()]
        [System.String]
        [ValidateSet("Application",
            "ApplicationWithSearch",
            "Custom",
            "DistributedCache",
            "Search",
            "SingleServerFarm",
            "WebFrontEnd",
            "WebFrontEndWithDistributedCache")]
        $ServerRole,

        [Parameter()]
        [ValidateSet("Off", "On", "OnDemand")]
        [System.String]
        $DeveloperDashboard,

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $ApplicationCredentialKey,

        [Parameter()]
        [System.Management.Automation.PSCredential]
        $InstallAccount,

        [Parameter()]
        [string]
        $CentralAdminServerName
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName SharePointDSC
    
    $PSBoundParameters.Add('Ensure', 'Present')
    $PSBoundParameters.Add('IsSingleInstance', 'Yes')
    $PSBoundParameters.Remove('InstanceName')
    $PSBoundParameters.Remove('PsDscRunAsCredential')
    $PSBoundParameters.Remove('CentralAdminServerName')

    if (-not $CentralAdministrationUrl)
    {
        WaitForAll WaitForFarmCreation
        {
            NodeName = $CentralAdminServerName
            ResourceName = "[SPFarm]SharePointFarmCreate::[SharePointProvisioning]"
            RetryIntervalSec = 20
            RetryCount = 180
        }
        $executionName = 'SharePointFarmJoin'
    }
    else
    {
        $executionName = 'SharePointFarmCreate'
    }

    (Get-DscSplattedResource -ResourceName SPFarm -ExecutionName $executionName -Properties $PSBoundParameters -NoInvoke).Invoke($PSBoundParameters)

}