DSCResources/cDtcResource_cDtc/cDtcResource_cDtc.psm1
function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $InstanceName, [parameter(Mandatory = $true)] [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [ValidateSet("NoAuth","Mutual","Incoming")] [System.String] $AuthenticationLevel, [parameter(Mandatory = $true)] [ValidateSet("Started","Stopped")] [System.String] $Status, [parameter(Mandatory = $true)] [System.Boolean] $InboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $OutboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteClientAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteAdministrationAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $XATransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $LUTransactionsEnabled ) #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." Write-Verbose 'Entered Get() method 0.0.1' $dtc = Get-Dtc -DtcName $InstanceName $present = IsDtcPresent $InstanceName $dtcNetworkSetting = Get-DtcNetworkSetting -DtcName $InstanceName if($present) { $_ensure = "Present" } else { return @{ Ensure = "Absent" } } return @{ InstanceName = $dtc.DtcName Ensure = $_ensure Status = $dtc.Status AuthenticationLevel = $dtcNetworkSetting.AuthenticationLevel InboundTransactionsEnabled = $dtcNetworkSetting.InboundTransactionsEnabled OutboundTransactionsEnabled = $dtcNetworkSetting.OutboundTransactionsEnabled RemoteClientAccessEnabled = $dtcNetworkSetting.RemoteClientAccessEnabled RemoteAdministrationAccessEnabled = $dtcNetworkSetting.RemoteAdministrationAccessEnabled XATransactionsEnabled = $dtcNetworkSetting.XATransactionsEnabled LUTransactionsEnabled = $dtcNetworkSetting.LUTransactionsEnabled } <# $returnValue = @{ InstanceName = [System.String] Ensure = [System.String] AuthenticationLevel = [System.String] Status = [System.String] InboundTransactionsEnabled = [System.Boolean] OutboundTransactionsEnabled = [System.Boolean] RemoteClientAccessEnabled = [System.Boolean] RemoteAdministrationAccessEnabled = [System.Boolean] XATransactionsEnabled = [System.Boolean] LUTransactionsEnabled = [System.Boolean] } $returnValue #> } function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.String] $InstanceName, [parameter(Mandatory = $true)] [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [ValidateSet("NoAuth","Mutual","Incoming")] [System.String] $AuthenticationLevel, [parameter(Mandatory = $true)] [ValidateSet("Started","Stopped")] [System.String] $Status, [parameter(Mandatory = $true)] [System.Boolean] $InboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $OutboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteClientAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteAdministrationAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $XATransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $LUTransactionsEnabled ) #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." #Include this line if the resource requires a system reboot. #$global:DSCMachineStatus = 1 Write-Verbose 'Entered Set() method 0.0.1' $dtc = Get-Dtc -DtcName $InstanceName $present = IsDtcPresent $InstanceName if($present -and $Ensure -eq "Absent") { Write-Verbose 'Uninstalling MS DTC' Uninstall-Dtc -Confirm $true return } if(-not $present -and $Ensure -eq "Present") { Write-Verbose 'Installing MS DTC' Install-Dtc } Set-DtcNetworkSetting ` -DtcName $InstanceName ` -AuthenticationLevel $AuthenticationLevel ` -InboundTransactionsEnabled $InboundTransactionsEnabled ` -OutboundTransactionsEnabled $OutboundTransactionsEnabled ` -RemoteClientAccessEnabled $RemoteClientAccessEnabled ` -RemoteAdministrationAccessEnabled $RemoteAdministrationAccessEnabled ` -XATransactionsEnabled $XATransactionsEnabled ` -LUTransactionsEnabled $LUTransactionsEnabled if($Status -eq "Stopped") { Write-Verbose 'Stopping MS DTC' Stop-Dtc } else { Write-Verbose 'Starting MS DTC' Start-Dtc } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $InstanceName, [parameter(Mandatory = $true)] [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [ValidateSet("NoAuth","Mutual","Incoming")] [System.String] $AuthenticationLevel, [parameter(Mandatory = $true)] [ValidateSet("Started","Stopped")] [System.String] $Status, [parameter(Mandatory = $true)] [System.Boolean] $InboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $OutboundTransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteClientAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $RemoteAdministrationAccessEnabled, [parameter(Mandatory = $true)] [System.Boolean] $XATransactionsEnabled, [parameter(Mandatory = $true)] [System.Boolean] $LUTransactionsEnabled ) #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." Write-Verbose 'Entered Test() method 0.0.1' $dtc = Get-Dtc -DtcName $InstanceName $present = IsDtcPresent $InstanceName $dtcNetworkSetting = Get-DtcNetworkSetting -DtcName $InstanceName if(-not $present -and $Ensure -eq 'Absent') { return $true } if(-not $present -and $Ensure -eq 'Present') { Write-Verbose 'DTC is not installed' return $false } if(-Not $present -and $Ensure -eq "Absent") { Write-Verbose 'DTC is absent when Ensure is set to Absent' return $true; } if(-Not $present -and $Ensure -eq "Present") { Write-Verbose 'DTC is absent when Ensure is set to Present' return $false; } if($present -and $Ensure -eq "Absent") { Write-Verbose 'DTC is present when Ensure is set to Absent' return $false; } if($dtc.DtcName -ne $InstanceName) { Write-Verbose 'DTC instance name mismatch' return $false } if($dtc.Status -ne $Status) { Write-Verbose 'DTC status mismatch' return $false } if($dtcNetworkSetting.AuthenticationLevel -ne $AuthenticationLevel) { Write-Verbose 'DTC authentication level mismatch' return $false } if($dtcNetworkSetting.InboundTransactionsEnabled -ne $InboundTransactionsEnabled) { Write-Verbose 'DTC inbound transaction enabled mismatch' return $false } if($dtcNetworkSetting.OutboundTransactionsEnabled -ne $OutboundTransactionsEnabled) { Write-Verbose 'DTC outbound transaction enabled mismatch' return $false } if($dtcNetworkSetting.RemoteClientAccessEnabled -ne $RemoteClientAccessEnabled) { Write-Verbose 'DTC remote client access enabled mismatch' return $false } if($dtcNetworkSetting.RemoteAdministrationAccessEnabled -ne $RemoteAdministrationAccessEnabled) { Write-Verbose 'DTC remote administration access enabled mismatch' return $false } if($dtcNetworkSetting.XATransactionsEnabled -ne $XATransactionsEnabled) { Write-Verbose 'DTC XA transaction enabled mismatch' return $false } if($dtcNetworkSetting.LUTransactionsEnabled -ne $LUTransactionsEnabled) { Write-Verbose 'DTC LU transaction enabled mismatch' return $false } return $true <# $result = [System.Boolean] $result #> } function IsDtcPresent { [OutputType([System.Boolean])] param( [string] $InstanceName ) Write-Verbose 'Check if DTC is present' $dtc = Get-Dtc -DtcName $InstanceName return $dtc -ne $null } Export-ModuleMember -Function *-TargetResource |