Examples/EndToEndExample/7-ConfigurePrimaryDatabases.ps1
<#
.EXAMPLE This example shows how to configure primary databases. #> $ConfigurationData = @{ AllNodes = @( @{ #region Common Settings for All Nodes NodeName = '*' <# NOTE! THIS IS NOT RECOMMENDED IN PRODUCTION. This is added so that AppVeyor automatic tests can pass, otherwise the tests will fail on passwords being in plain text and not being encrypted. Because it is not possible to have a certificate in AppVeyor to encrypt the passwords we need to add the parameter 'PSDscAllowPlainTextPassword'. NOTE! THIS IS NOT RECOMMENDED IN PRODUCTION. See: http://blogs.msdn.com/b/powershell/archive/2014/01/31/want-to-secure-credentials-in-windows-powershell-desired-state-configuration.aspx #> PSDscAllowPlainTextPassword = $true <# The location of the exported public certifcate which will be used to encrypt credentials during compilation. CertificateFile = 'C:\public-certificate.cer' #> #Thumbprint of the certificate being used for decrypting credentials Thumbprint = '39bef4b2e82599233154465323ebf96a12b60673' #The paths to the CSV files generated by the Server Role Requirements Calculator ServersCsvPath = "$($PSScriptRoot)\Calculators\Lab\Servers.csv" MailboxDatabasesCsvPath = "$($PSScriptRoot)\Calculators\Lab\MailboxDatabases.csv" MailboxDatabaseCopiesCsvPath = "$($PSScriptRoot)\Calculators\Lab\MailboxDatabaseCopies.csv" #endregion } #region Individual Node Settings #region DAG01 Nodes @{ NodeName = 'e15-1' Fqdn = 'e15-1.contoso.local' Role = 'AdditionalDAGMember' DAGId = 'DAG01' CASId = 'Site1CAS' ServerNameInCsv = 'e15-1' } @{ NodeName = 'e15-2' Fqdn = 'e15-2.contoso.local' Role = 'AdditionalDAGMember' DAGId = 'DAG01' CASId = 'Site1CAS' ServerNameInCsv = 'e15-2' } @{ NodeName = 'e15-3' Fqdn = 'e15-3.contoso.local' Role = 'FirstDAGMember' DAGId = 'DAG01' CASId = 'Site2CAS' ServerNameInCsv = 'e15-3' } @{ NodeName = 'e15-4' Fqdn = 'e15-4.contoso.local' Role = 'AdditionalDAGMember' DAGId = 'DAG01' CASId = 'Site2CAS' ServerNameInCsv = 'e15-4' } #endregion ); #region DAG Settings DAG01 = @( @{ DAGName = 'DAG01' AutoDagTotalNumberOfServers = 12 AutoDagDatabaseCopiesPerVolume = 4 DatabaseAvailabilityGroupIPAddresses = '192.168.1.31','192.168.2.31' WitnessServer = 'e14-1.contoso.local' DbNameReplacements = @{"nn" = "01"} Thumbprint = "0079D0F68F44C7DA5252B4779F872F46DFAF0CBC" } ) #endregion #region CAS Settings #Settings that will apply to all CAS AllCAS = @( @{ ExternalNamespace = 'mail.contoso.local' } ) #Settings that will apply only to Quincy CAS Site1CAS = @( @{ InternalNamespace = 'mail-site1.contoso.local' AutoDiscoverSiteScope = 'Site1' InstantMessagingServerName = 'l15-1.contoso.local' DefaultOAB = "Default Offline Address Book (Site1)" } ); #Settings that will apply only to Phoenix CAS Site2CAS = @( @{ InternalNamespace = 'mail-site2.contoso.local' AutoDiscoverSiteScope = 'Site2' InstantMessagingServerName = 'l15-2.contoso.local' DefaultOAB = "Default Offline Address Book (Site2)" } ); #endregion } Configuration Example { param ( [Parameter(Mandatory = $true)] [ValidateNotNullorEmpty()] [System.Management.Automation.PSCredential] $ExchangeAdminCredential ) Import-DscResource -Module xExchange Import-Module -Name (Join-Path -Path (Split-Path -Parent (Split-Path -Parent $PSScriptRoot)) -ChildPath 'Modules\xExchangeCalculatorHelper.psm1') #This section will handle configuring all non-DAG specific settings, including CAS and MBX settings. Node $AllNodes.NodeName { $dagSettings = $ConfigurationData[$Node.DAGId] #Get DAG settings for this node $casSettingsPerSite = $ConfigurationData[$Node.CASId] #Get site specific CAS settings for this node ###Mailbox Server settings### $dbMap = Get-DBMapFromServersCsv -ServersCsvPath $Node.ServersCsvPath ` -ServerNameInCsv $Node.ServerNameInCsv ` -DbNameReplacements $dagSettings.DbNameReplacements $primaryDbList = Get-DBListFromMailboxDatabasesCsv -MailboxDatabasesCsvPath $Node.MailboxDatabasesCsvPath ` -ServerNameInCsv $Node.ServerNameInCsv ` -DbNameReplacements $dagSettings.DbNameReplacements #Create all mount points on the server xExchAutoMountPoint AMP { Identity = $Node.NodeName AutoDagDatabasesRootFolderPath = 'C:\ExchangeDatabases' AutoDagVolumesRootFolderPath = 'C:\ExchangeVolumes' DiskToDBMap = $dbMap SpareVolumeCount = 1 VolumePrefix = 'EXVOL' } #Create primary databases foreach ($DB in $primaryDbList) { $resourceId = "MDB_$($DB.Name)" #Need to define a unique ID for each database xExchMailboxDatabase $resourceId { Name = $DB.Name Credential = $ExchangeAdminCredential EdbFilePath = $DB.DBFilePath LogFolderPath = $DB.LogFolderPath Server = $Node.NodeName CircularLoggingEnabled = $true DatabaseCopyCount = $dagSettings.AutoDagDatabaseCopiesPerVolume OfflineAddressBook = $casSettingsPerSite.DefaultOAB SkipInitialDatabaseMount = $true DependsOn = '[xExchAutoMountPoint]AMP' #Can't create databases until the mount points exist } } } } |