DSCResources/DSC-data-driven-deployment/scripts/DSCDataDrivenSQLConfiguration.ps1

#Set Required Variables
$OutputPath = 'C:\DSC_Mof'     #Location where mof files will be stored
$ConfigurationHelperPath = 'C:\DSC-data-driven-deployment\'
$SQLServerBitsLocation = '\\ohdc9000\SQLAutoBuilds'
$DefaultSQLVersion = 'SQL2014'
$NETLocation = '\\ohdc9000\SQLAutoBuilds\SQL2014\WindowsServer2012R2\sources\sxs'
$PSDscAllowDomainUser = $true 
$PSDscAllowPlainTextPassword = $true #Should be $false for production workloads
$SQLAdminAccount = 'CORP\Administrator'
$SQLInstanceName = 'MSSQLSERVER'
$SQLInstallShareDir = 'C:\Program Files\Microsoft SQL Server'
$SQLUserDBDir = 'C:\Program Files\Microsoft SQL Server\Data'
$SQLTempDBLogDir = 'C:\Program Files\Microsoft SQL Server\Data'
$SQLTempDBDir = 'C:\Program Files\Microsoft SQL Server\Data'
$InstallSQLDataDir = 'C:\Program Files\Microsoft SQL ServerL\Data'
$SQLUserDBLogDir = 'C:\Program Files\Microsoft SQL Server\Data'
$InstallSharedWOWDir = 'c:\Program Files (x86)\Microsoft SQL Server'
$Features = 'SQLENGINE,IS,SSMS,ADV_SSMS'
$SQLBackupDir = 'C:\Program Files\Microsoft SQL Server\Backup' 
$InstanceDir = 'C:\Program Files\Microsoft SQL Server'
$DMaxDop = $true
$MaxDopVal = '0'
$DMemory = $true
$MinMemory = '256'
$MaxMemory = '512'
$InstallerAccountName = 'SQLInstallerAccount'
$SQLAgentAccountName = 'SQLAgentAccount'
$SQLServiceAccountName = 'SQLServiceAccount'
$SQLInstallerAccount = 'CORP\SQLAuto'
$SQLServiceAccount ='CORP\SQLSvc'
$SQLAgenttAccount = 'CORP\SQLAgt' 
$NodetoConfigure = $env:computername

Configuration SQLBuild
{
    Import-DscResource â€“ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xSQLServer
 

   Node $AllNodes.NodeName
   {
   
      # Set LCM to reboot if needed
      LocalConfigurationManager
      {
          AllowModuleOverwrite = $true
          RefreshMode = 'Push'
          ConfigurationMode = 'ApplyAndAutoCorrect'
          RebootNodeIfNeeded = $true
          DebugMode = "All"
      }
      
      WindowsFeature "NET"
      {
          Ensure = "Present"
          Name = "NET-Framework-Core"
          Source = $Node.NETPath 
      }
      
      WindowsFeature "ADTools"
      {
          Ensure = "Present"
          Name = "RSAT-AD-PowerShell"
          Source = $Node.NETPath
      }

      if($Node.Features)
      {
         xSqlServerSetup ($Node.NodeName)
         {
             SourcePath = $Node.SourcePath
             SetupCredential = $Node.InstallerServiceAccount
             InstanceName = $Node.InstanceName
             Features = $Node.Features
             SQLSysAdminAccounts = $Node.SQLSysAdminAccounts
             InstallSharedDir = $Node.SQLInstallShareDir
             InstallSharedWOWDir = $Node.InstallSharedWOWDir
             InstanceDir = $Node.InstanceDir
             InstallSQLDataDir = $Node.InstallSQLDataDir
             SQLUserDBDir = $Node.SQLUserDBDir
             SQLUserDBLogDir = $Node.SQLUserDBLogDir
             SQLTempDBDir = $Node.SQLTempDBDir
             SQLTempDBLogDir = $Node.SQLTempDBLogDir
             SQLBackupDir = $Node.SQLBackupDir
         
             DependsOn = '[WindowsFeature]NET'
         }
         
         xSqlServerFirewall ($Node.NodeName)
          {
             SourcePath = $Node.SourcePath
             InstanceName = $Node.InstanceName
             Features = $Node.Features
         
             DependsOn = ("[xSqlServerSetup]" + $Node.NodeName)
         }
         xSQLServerPowerPlan ($Node.NodeName)
         {
             Ensure = "Present"
         }
         xSQLServerMemory ($Node.NodeName)
         {
             Ensure = "Present"
             SQLInstanceName = $Node.InstanceName
             DynamicAlloc = $True
         
             DependsOn = ("[xSqlServerSetup]" + $Node.NodeName)
         }
         xSQLServerMaxDop($Node.NodeName)
         {
             Ensure = "Present"
             DynamicAlloc = $true
         
             DependsOn = ("[xSqlServerSetup]" + $Node.NodeName)     
         }
       }
    } 
}
$ConfigurationData = @{
    AllNodes = @(
        @{
            NodeName = "*"
            PSDscAllowPlainTextPassword = $PSDscAllowPlainTextPassword
            PSDscAllowDomainUser = $PSDscAllowDomainUser
            NETPath = $NETLocation
            SourcePath = $("$SQLServerBitsLocation\$DefaultSQLVersion")
            InstallerServiceAccount = Get-Credential -UserName $SQLInstallerAccount -Message "Credentials to Install SQL Server"
        }
        @{
            NodeName = $NodetoConfigure
            InstanceName    = $SQLInstanceName
            Features        = $Features
            SQLSysAdminAccounts = $SQLAdminAccount
            InstallSharedDir = $SQLInstallShareDir
            InstallSharedWOWDir = $InstallSharedWOWDir
            InstanceDir = $SQLInstallShareDir
            InstallSQLDataDir = $SQLd
            SQLUserDBDir = $SQLUserDBDir
            SQLUserDBLogDir = $SQLUserDBLogDir 
            SQLTempDBDir = $SQLTempDBDir
            SQLTempDBLogDir = $SQLTempDBLogDir
            SQLBackupDir = $SQLBackupDir
        }
    )
}

SQLBuild -ConfigurationData $ConfigurationData -OutputPath $OutputPath

Start-DscConfiguration -ComputerName $NodetoConfigure -Path $OutputPath -Verbose -Wait -Force
Set-DscLocalConfigurationManager -Path $OutputPath -Verbose
Start-DscConfiguration -Path $OutputPath -Verbose -Wait -Force