DSCResources/MSFT_xExchMailboxDatabase/MSFT_xExchMailboxDatabase.psm1
function Get-TargetResource { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSDSCUseVerboseMessageInDSCResource", "")] [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Write-FunctionEntry -Parameters @{'Name' = $Name} -Verbose:$VerbosePreference # Establish remote PowerShell session Get-RemoteExchangeSession -Credential $Credential -CommandsToLoad 'Get-MailboxDatabase', 'Set-AdServerSettings' -Verbose:$VerbosePreference if ($PSBoundParameters.ContainsKey('AdServerSettingsPreferredServer') -and ![System.String]::IsNullOrEmpty($AdServerSettingsPreferredServer)) { Set-ADServerSettings -PreferredServer "$($AdServerSettingsPreferredServer)" } $db = GetMailboxDatabase @PSBoundParameters if ($null -ne $db) { $returnValue = @{ Name = [System.String] $Name Server = [System.String] $Server EdbFilePath = [System.String] $EdbFilePath LogFolderPath = [System.String] $LogFolderPath DatabaseCopyCount = [System.UInt32] $DatabaseCopyCount AutoDagExcludeFromMonitoring = [System.Boolean] $db.AutoDagExcludeFromMonitoring BackgroundDatabaseMaintenance = [System.Boolean] $db.BackgroundDatabaseMaintenance CalendarLoggingQuota = [System.String] $db.CalendarLoggingQuota CircularLoggingEnabled = [System.Boolean] $db.CircularLoggingEnabled DataMoveReplicationConstraint = [System.String] $db.DataMoveReplicationConstraint DeletedItemRetention = [System.String] $db.DeletedItemRetention EventHistoryRetentionPeriod = [System.String] $db.EventHistoryRetentionPeriod IndexEnabled = [System.Boolean] $db.IndexEnabled IsExcludedFromProvisioning = [System.Boolean] $db.IsExcludedFromProvisioning IssueWarningQuota = [System.String] $db.IssueWarningQuota IsSuspendedFromProvisioning = [System.Boolean] $db.IsSuspendedFromProvisioning JournalRecipient = [System.String] $db.JournalRecipient MailboxRetention = [System.String] $db.MailboxRetention MountAtStartup = [System.Boolean] $db.MountAtStartup OfflineAddressBook = [System.String] $db.OfflineAddressBook ProhibitSendQuota = [System.String] $db.ProhibitSendQuota ProhibitSendReceiveQuota = [System.String] $db.ProhibitSendReceiveQuota RecoverableItemsQuota = [System.String] $db.RecoverableItemsQuota RecoverableItemsWarningQuota = [System.String] $db.RecoverableItemsWarningQuota RetainDeletedItemsUntilBackup = [System.Boolean] $db.RetainDeletedItemsUntilBackup } $serverVersion = Get-ExchangeVersionYear if ($serverVersion -in '2016', '2019') { $returnValue.Add('IsExcludedFromProvisioningReason', [System.String] $db.IsExcludedFromProvisioningReason) } } $returnValue } function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Write-FunctionEntry -Parameters @{'Name' = $Name} -Verbose:$VerbosePreference # Establish remote PowerShell session Get-RemoteExchangeSession -Credential $Credential ` -CommandsToLoad '*MailboxDatabase', 'Move-DatabasePath', 'Mount-Database', 'Set-AdServerSettings'` -Verbose:$VerbosePreference # Check for non-existent parameters in Exchange 2013 Remove-NotApplicableParamsForVersion -PSBoundParametersIn $PSBoundParameters ` -ParamName 'IsExcludedFromProvisioningReason' ` -ResourceName 'xExchMailboxDatabase' ` -ParamExistsInVersion '2016', '2019' Set-EmptyStringParamsToNull -PSBoundParametersIn $PSBoundParameters if ($PSBoundParameters.ContainsKey('AdServerSettingsPreferredServer') -and ![System.String]::IsNullOrEmpty($AdServerSettingsPreferredServer)) { Set-ADServerSettings -PreferredServer "$($AdServerSettingsPreferredServer)" } $db = GetMailboxDatabase @PSBoundParameters if ($null -eq $db) # Need to create a new DB { # Create a copy of the original parameters $originalPSBoundParameters = @{} + $PSBoundParameters Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToKeep 'Name', 'Server', 'EdbFilePath', 'LogFolderPath', 'DomainController' # Create the database $db = New-MailboxDatabase @PSBoundParameters if ($null -ne $db) { # Add original props back Add-ToPSBoundParametersFromHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToAdd $originalPSBoundParameters if ($AllowServiceRestart -eq $true) { Write-Verbose -Message 'Restarting Information Store' Restart-Service MSExchangeIS } else { Write-Warning -Message 'The configuration will not take effect until MSExchangeIS is manually restarted.' } # If MountAtStartup is not explicitly set to $false, mount the new database if ($PSBoundParameters.ContainsKey('SkipInitialDatabaseMount') -eq $true -and $SkipInitialDatabaseMount -eq $true) { # Don't mount the DB, regardless of what else is set. } elseif ($PSBoundParameters.ContainsKey('MountAtStartup') -eq $false -or $MountAtStartup -eq $true) { Write-Verbose -Message 'Attempting to mount database.' MountDatabase @PSBoundParameters } } else { throw 'Failed to create new Mailbox Database' } } if ($null -ne $db) # Set props on existing DB { # First check if a DB or log move is required if (($PSBoundParameters.ContainsKey('EdbFilePath') -and (Compare-StringToString -String1 $db.EdbFilePath.PathName -String2 $EdbFilePath -IgnoreCase) -eq $false) -or ($PSBoundParameters.ContainsKey('LogFolderPath') -and (Compare-StringToString -String1 $db.LogFolderPath.PathName -String2 $LogFolderPath -IgnoreCase) -eq $false)) { if ($db.DatabaseCopies.Count -le 1) { Write-Verbose -Message 'Moving database and/or log path' MoveDatabaseOrLogPath @PSBoundParameters } else { throw 'Database must have only a single copy for the DB path or log path to be moved' } } # setup params Add-ToPSBoundParametersFromHashtable -PSBoundParametersIn $PSBoundParameters ` -ParamsToAdd @{'Identity' = $Name} Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters ` -ParamsToRemove 'Name', 'Server', 'DatabaseCopyCount', 'AllowServiceRestart', 'EdbFilePath', 'LogFolderPath', 'Credential', 'AdServerSettingsPreferredServer', 'SkipInitialDatabaseMount' # Remove parameters that depend on all copies being added if ($db.DatabaseCopies.Count -lt $DatabaseCopyCount) { Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters ` -ParamsToRemove 'CircularLoggingEnabled', 'DataMoveReplicationConstraint' } Set-MailboxDatabase @PSBoundParameters } } function Test-TargetResource { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSDSCUseVerboseMessageInDSCResource", "")] [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Write-FunctionEntry -Parameters @{'Name' = $Name} -Verbose:$VerbosePreference # Establish remote PowerShell session Get-RemoteExchangeSession -Credential $Credential ` -CommandsToLoad 'Get-MailboxDatabase', 'Get-Recipient', 'Set-AdServerSettings'` -Verbose:$VerbosePreference # Check for non-existent parameters in Exchange 2013 Remove-NotApplicableParamsForVersion -PSBoundParametersIn $PSBoundParameters ` -ParamName 'IsExcludedFromProvisioningReason' ` -ResourceName 'xExchMailboxDatabase' ` -ParamExistsInVersion '2016', '2019' if ($PSBoundParameters.ContainsKey('AdServerSettingsPreferredServer') -and ![System.String]::IsNullOrEmpty($AdServerSettingsPreferredServer)) { Set-ADServerSettings -PreferredServer "$($AdServerSettingsPreferredServer)" } $db = GetMailboxDatabase @PSBoundParameters $testResults = $true if ($null -eq $db) { Write-Verbose -Message 'Unable to retrieve Mailbox Database settings or Mailbox Database does not exist' $testResults = $false } else { if (!(Test-ExchangeSetting -Name 'AutoDagExcludeFromMonitoring' -Type 'Boolean' -ExpectedValue $AutoDagExcludeFromMonitoring -ActualValue $db.AutoDagExcludeFromMonitoring -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'BackgroundDatabaseMaintenance' -Type 'Boolean' -ExpectedValue $BackgroundDatabaseMaintenance -ActualValue $db.BackgroundDatabaseMaintenance -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'CalendarLoggingQuota' -Type 'Unlimited' -ExpectedValue $CalendarLoggingQuota -ActualValue $db.CalendarLoggingQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } # Only check these if all copies have been added if ($db.DatabaseCopies.Count -ge $DatabaseCopyCount) { if (!(Test-ExchangeSetting -Name 'CircularLoggingEnabled' -Type 'Boolean' -ExpectedValue $CircularLoggingEnabled -ActualValue $db.CircularLoggingEnabled -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'DataMoveReplicationConstraint' -Type 'Boolean' -ExpectedValue $DataMoveReplicationConstraint -ActualValue $db.DataMoveReplicationConstraint -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } } if (!(Test-ExchangeSetting -Name 'DeletedItemRetention' -Type 'Timespan' -ExpectedValue $DeletedItemRetention -ActualValue $db.DeletedItemRetention -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'EdbFilePath' -Type 'String' -ExpectedValue $EdbFilePath -ActualValue $db.EdbFilePath.PathName -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'EventHistoryRetentionPeriod' -Type 'Timespan' -ExpectedValue $EventHistoryRetentionPeriod -ActualValue $db.EventHistoryRetentionPeriod -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'IndexEnabled' -Type 'Boolean' -ExpectedValue $IndexEnabled -ActualValue $db.IndexEnabled -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'IsExcludedFromProvisioning' -Type 'Boolean' -ExpectedValue $IsExcludedFromProvisioning -ActualValue $db.IsExcludedFromProvisioning -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'IssueWarningQuota' -Type 'Unlimited' -ExpectedValue $IssueWarningQuota -ActualValue $db.IssueWarningQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'IsSuspendedFromProvisioning' -Type 'Boolean' -ExpectedValue $IsSuspendedFromProvisioning -ActualValue $db.IsSuspendedFromProvisioning -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'JournalRecipient' -Type 'ADObjectID' -ExpectedValue $JournalRecipient -ActualValue $db.JournalRecipient -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'LogFolderPath' -Type 'String' -ExpectedValue $LogFolderPath -ActualValue $db.LogFolderPath.PathName -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'MailboxRetention' -Type 'Timespan' -ExpectedValue $MailboxRetention -ActualValue $db.MailboxRetention -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'MountAtStartup' -Type 'Boolean' -ExpectedValue $MountAtStartup -ActualValue $db.MountAtStartup -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } # Strip leading slash off the OAB now so it's easier to check if ($PSBoundParameters.ContainsKey('OfflineAddressBook')) { if ($OfflineAddressBook.StartsWith('\')) { $OfflineAddressBook = $OfflineAddressBook.Substring(1) } if ($db.OfflineAddressBook.Name.StartsWith('\')) { $dbOab = $db.OfflineAddressBook.Name.Substring(1) } else { $dbOab = $db.OfflineAddressBook.Name } } if (!(Test-ExchangeSetting -Name 'OfflineAddressBook' -Type 'String' -ExpectedValue $OfflineAddressBook -ActualValue $dbOab -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'ProhibitSendQuota' -Type 'Unlimited' -ExpectedValue $ProhibitSendQuota -ActualValue $db.ProhibitSendQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'ProhibitSendReceiveQuota' -Type 'Unlimited' -ExpectedValue $ProhibitSendReceiveQuota -ActualValue $db.ProhibitSendReceiveQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'RecoverableItemsQuota' -Type 'Unlimited' -ExpectedValue $RecoverableItemsQuota -ActualValue $db.RecoverableItemsQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'RecoverableItemsWarningQuota' -Type 'Unlimited' -ExpectedValue $RecoverableItemsWarningQuota -ActualValue $db.RecoverableItemsWarningQuota -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } if (!(Test-ExchangeSetting -Name 'RetainDeletedItemsUntilBackup' -Type 'Boolean' -ExpectedValue $RetainDeletedItemsUntilBackup -ActualValue $db.RetainDeletedItemsUntilBackup -PSBoundParametersIn $PSBoundParameters -Verbose:$VerbosePreference)) { $testResults = $false } } return $testResults } # Runs Get-MailboxDatabase, only specifying Identity and optionally DomainController function GetMailboxDatabase { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Add-ToPSBoundParametersFromHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToAdd @{'Identity' = $Name} Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToKeep 'Identity', 'DomainController' return (Get-MailboxDatabase @PSBoundParameters -ErrorAction SilentlyContinue) } # Moves the database or log path. Doesn't validate that the DB is in a good condition to move. Caller should do that. function MoveDatabaseOrLogPath { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Add-ToPSBoundParametersFromHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToAdd @{'Identity' = $Name} Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToKeep 'Identity', 'DomainController', 'EdbFilePath', 'LogFolderPath' Move-DatabasePath @PSBoundParameters -Confirm:$false -Force } # Mounts the specified database function MountDatabase { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $Name, [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential, [Parameter(Mandatory = $true)] [System.UInt32] $DatabaseCopyCount, [Parameter(Mandatory = $true)] [System.String] $EdbFilePath, [Parameter(Mandatory = $true)] [System.String] $LogFolderPath, [Parameter(Mandatory = $true)] [System.String] $Server, [Parameter()] [System.Boolean] $AllowServiceRestart = $false, [Parameter()] [System.Boolean] $AutoDagExcludeFromMonitoring, [Parameter()] [System.Boolean] $BackgroundDatabaseMaintenance, [Parameter()] [System.String] $CalendarLoggingQuota, [Parameter()] [System.Boolean] $CircularLoggingEnabled, [Parameter()] [ValidateSet('None', 'SecondCopy', 'SecondDatacenter', 'AllDatacenters', 'AllCopies')] [System.String] $DataMoveReplicationConstraint, [Parameter()] [System.String] $DeletedItemRetention, [Parameter()] [System.String] $DomainController, [Parameter()] [System.String] $EventHistoryRetentionPeriod, [Parameter()] [System.Boolean] $IndexEnabled, [Parameter()] [System.Boolean] $IsExcludedFromProvisioning, [Parameter()] [System.String] $IsExcludedFromProvisioningReason, [Parameter()] [System.String] $IssueWarningQuota, [Parameter()] [System.Boolean] $IsSuspendedFromProvisioning, [Parameter()] [System.String] $JournalRecipient, [Parameter()] [System.String] $MailboxRetention, [Parameter()] [System.Boolean] $MountAtStartup, [Parameter()] [System.String] $OfflineAddressBook, [Parameter()] [System.String] $ProhibitSendQuota, [Parameter()] [System.String] $ProhibitSendReceiveQuota, [Parameter()] [System.String] $RecoverableItemsQuota, [Parameter()] [System.String] $RecoverableItemsWarningQuota, [Parameter()] [System.Boolean] $RetainDeletedItemsUntilBackup, [Parameter()] [System.String] $AdServerSettingsPreferredServer, [Parameter()] [System.Boolean] $SkipInitialDatabaseMount ) Add-ToPSBoundParametersFromHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToAdd @{'Identity' = $Name} Remove-FromPSBoundParametersUsingHashtable -PSBoundParametersIn $PSBoundParameters -ParamsToKeep 'Identity', 'DomainController' $previousError = Get-PreviousError Mount-Database @PSBoundParameters Assert-NoNewError -CmdletBeingRun 'Mount-Database' -PreviousError $previousError -Verbose:$VerbosePreference } Export-ModuleMember -Function *-TargetResource |