DSCResources/cDtcNetworkSetting/cDtcNetworkSetting.psm1

Function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [parameter(Mandatory = $True)]
        [System.String]$DtcName,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteClientAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteAdministrationAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$InboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$OutboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [ValidateSet("NoAuth","Incoming","Mutual")]
        [System.String]$AuthenticationLevel
    )

    Try {
        $CurrentDtc = Get-DtcNetworkSetting -DtcName $DtcName -ErrorAction Stop
    }
    Catch {
        Throw "Failed to get the network settings for the DtcName $DtcName"
    }

    $returnValue = @{
        DtcName = $DtcName
        RemoteClientAccessEnabled = $CurrentDtc.RemoteClientAccessEnabled
        RemoteAdministrationAccessEnabled = $CurrentDtc.RemoteAdministrationAccessEnabled
        InboundTransactionsEnabled = $CurrentDtc.InboundTransactionsEnabled
        OutboundTransactionsEnabled = $CurrentDtc.OutboundTransactionsEnabled
        AuthenticationLevel = $CurrentDtc.AuthenticationLevel
        LUTransactionsEnabled = $CurrentDtc.LUTransactionsEnabled
        XATransactionsEnabled = $CurrentDtc.XATransactionsEnabled
    }

    $returnValue
}

Function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory = $True)]
        [System.String]$DtcName,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteClientAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteAdministrationAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$InboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$OutboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [ValidateSet("NoAuth","Incoming","Mutual")]
        [System.String]$AuthenticationLevel,

        [System.Boolean]$LUTransactionsEnabled = $True,

        [System.Boolean]$XATransactionsEnabled = $False
    )

    $Params = @{
        DtcName=$DtcName
        RemoteClientAccessEnabled=$RemoteClientAccessEnabled
        RemoteAdministrationAccessEnabled=$RemoteAdministrationAccessEnabled
        InboundTransactionsEnabled=$InboundTransactionsEnabled
        OutboundTransactionsEnabled=$OutboundTransactionsEnabled
        AuthenticationLevel=$AuthenticationLevel
        LUTransactionsEnabled =$LUTransactionsEnabled
        XATransactionsEnabled=$XATransactionsEnabled
        Confirm=$False
        Verbose=$True
        ErrorAction="Stop"
    }

    Try {
        Set-DtcNetworkSetting @Params
    }
    Catch {
        Write-Error "An error occurred while configuring DTC instance $DtcName. Exception : $($_.Exception.Message)"
    }
}

Function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [parameter(Mandatory = $True)]
        [System.String]$DtcName,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteClientAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$RemoteAdministrationAccessEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$InboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [System.Boolean]$OutboundTransactionsEnabled,

        [parameter(Mandatory = $True)]
        [ValidateSet("NoAuth","Incoming","Mutual")]
        [System.String]$AuthenticationLevel,

        [System.Boolean]$LUTransactionsEnabled = $True,

        [System.Boolean]$XATransactionsEnabled = $False
    )

    # Removing the bound parameters which are not supported by Get-TargetResource
    If ($PSBoundParameters.ContainsKey(‘LUTransactionsEnabled’)) {
        $PSBoundParameters.Remove('LUTransactionsEnabled’) | Out-Null
    }
    If ($PSBoundParameters.ContainsKey('XATransactionsEnabled')) {
        $PSBoundParameters.Remove('XATransactionsEnabled’) | Out-Null
    }

    $CurrentDtc = Get-TargetResource @PSBoundParameters

    [System.Boolean]$RemoteClientAccessEnabledTest = $CurrentDtc.RemoteClientAccessEnabled -eq $RemoteClientAccessEnabled
    Write-Verbose "Test of property RemoteClientAccessEnabled of DtcName $DtcName : $($RemoteClientAccessEnabledTest)"

    [System.Boolean]$RemoteAdministrationAccessEnabledTest = $CurrentDtc.RemoteAdministrationAccessEnabled -eq $RemoteAdministrationAccessEnabled
    Write-Verbose "Test of property RemoteAdministrationAccessEnabled of DtcName $DtcName : $($RemoteAdministrationAccessEnabledTest)"

    [System.Boolean]$InboundTransactionsEnabledTest = $CurrentDtc.InboundTransactionsEnabled -eq $InboundTransactionsEnabled
    Write-Verbose "Test of property InboundTransactionsEnabled of DtcName $DtcName : $($InboundTransactionsEnabledTest)"

    [System.Boolean]$OutboundTransactionsEnabledTest = $CurrentDtc.OutboundTransactionsEnabled -eq $OutboundTransactionsEnabled
    Write-Verbose "Test of property OutboundTransactionsEnabled of DtcName $DtcName : $($OutboundTransactionsEnabledTest)"

    [System.Boolean]$AuthenticationLevelTest = $CurrentDtc.AuthenticationLevel -eq $AuthenticationLevel
    Write-Verbose "Test of property AuthenticationLevel of DtcName $DtcName : $($AuthenticationLevelTest)"

    [System.Boolean]$LUTransactionsEnabledTest = $CurrentDtc.LUTransactionsEnabled -eq $LUTransactionsEnabled
    Write-Verbose "Test of property LUTransactionsEnabled of DtcName $DtcName : $($LUTransactionsEnabledTest)"

    [System.Boolean]$XATransactionsEnabledTest = $CurrentDtc.XATransactionsEnabled -eq $XATransactionsEnabled
    Write-Verbose "Test of property XATransactionsEnabled of DtcName $DtcName : $($XATransactionsEnabledTest)"

    $Result = $RemoteClientAccessEnabledTest -and $RemoteAdministrationAccessEnabledTest -and $InboundTransactionsEnabledTest -and $OutboundTransactionsEnabledTest -and $AuthenticationLevelTest -and $LUTransactionsEnabledTest -and $XATransactionsEnabledTest
    $Result
}

Export-ModuleMember -Function *-TargetResource