DSCResources/MSFT_xDatabaseServer/MSFT_xDatabaseServer.psm1
data LocalizedData { # culture="en-US" ConvertFrom-StringData @' LoginModeSuccess=Successfully set loginMode to '{0}'. LoginModeError=Failed to set loginMode to '{0}'. Ensure SQL Server is properly installed. LoginModeTestError=Failed to find current loginMode. Ensure SQL Server is properly installed. LoginModeTestTrue=The current LoginMode value '{0}' matches the desired loginMode value '{1}'. LoginModeTestFalse=The current LoginMode value '{0}' does NOT match the desired loginMode value '{1}'. '@ } Import-Module -DisableNameChecking -Name $PSScriptRoot\..\..\Modules\xDatabase.Common function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [ValidateSet("Windows", "Mixed")] [System.String] $LoginMode ) Write-Verbose -Message 'Getting current state.' try { $RegPath = (dir 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\' -Recurse | where property -eq "LoginMode").PSPath $ActualLoginModeValue = (Get-ItemProperty $RegPath -Name LoginMode).LoginMode $ActualLoginMode = if ($ActualLoginModeValue -eq 1) { "Windows" } else { "Mixed" } } catch { $errorId = "LoginModeTest"; $errorCategory = [System.Management.Automation.ErrorCategory]::InvalidResult $errorMessage = $($LocalizedData.LoginModeTestError) $exception = New-Object System.InvalidOperationException $errorMessage $errorRecord = New-Object System.Management.Automation.ErrorRecord $exception, $errorId, $errorCategory, $null $PSCmdlet.ThrowTerminatingError($errorRecord); } $returnValue = @{ LoginMode = $ActualLoginMode } $returnValue } function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateSet("Windows", "Mixed")] [System.String] $LoginMode ) Write-Verbose -Message 'Setting desired state.' if ($PSBoundParameters.ContainsKey('LoginMode')) # Set SQL authentication to Mixed: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\LoginMode { try { $RegPath = (dir 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\' -Recurse | where property -eq "LoginMode").PSPath $LoginModeValue = if ($LoginMode -eq "Windows") { 1 } else { 2 } set-itemproperty $RegPath LoginMode $LoginModeValue # restart SQL instance for above to take affect: net stop MSSQLServer net start MSSQLServer Write-Verbose -Message $($LocalizedData.LoginModeSuccess -f $LoginMode) } catch { $errorId = "LoginMode"; $errorCategory = [System.Management.Automation.ErrorCategory]::InvalidResult $errorMessage = $($LocalizedData.LoginModeError) -f ${LoginMode} $exception = New-Object System.InvalidOperationException $errorMessage $errorRecord = New-Object System.Management.Automation.ErrorRecord $exception, $errorId, $errorCategory, $null $PSCmdlet.ThrowTerminatingError($errorRecord); } } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [ValidateSet("Windows", "Mixed")] [System.String] $LoginMode ) Write-Verbose -Message 'Determine the current state.' $ReturnValue = $true if ($PSBoundParameters.ContainsKey('LoginMode')) { $LoginModeValue = if ($LoginMode -eq "Windows") { 1 } else { 2 } try { $RegPath = (dir 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\' -Recurse | where property -eq "LoginMode").PSPath $ActualLoginModeValue = (Get-ItemProperty $RegPath -Name LoginMode).LoginMode $ActualLoginMode = if ($ActualLoginModeValue -eq 1) { "Windows" } else { "Mixed" } } catch { $errorId = "LoginModeTest"; $errorCategory = [System.Management.Automation.ErrorCategory]::InvalidResult $errorMessage = $($LocalizedData.LoginModeTestError) $exception = New-Object System.InvalidOperationException $errorMessage $errorRecord = New-Object System.Management.Automation.ErrorRecord $exception, $errorId, $errorCategory, $null $PSCmdlet.ThrowTerminatingError($errorRecord); } if ($ActualLoginModeValue -ne $LoginModeValue) { $ReturnValue = $false Write-Verbose -Message $($LocalizedData.LoginModeTestFalse -f $ActualLoginMode, $LoginMode) } else { Write-Verbose -Message $($LocalizedData.LoginModeTestTrue -f $ActualLoginMode, $LoginMode) } } return $ReturnValue } Export-ModuleMember -Function *-TargetResource |