deprecated.psm1

#
# $Id: fcarpin $ Fabrizio Carpin
#

$warning = "WARNING: This function is deprecated. Please use"

# ==================================================
# region TEMPLATES
# ==================================================
Function ExportVSTemplate
{    
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$Port,

        [ValidateSet("tcp", "udp")]
        [string]$Protocol,

        [Int32]$VSIndex,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Path,
        [switch]$Force,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Export-VSTemplate"
}
Export-ModuleMember -function ExportVSTemplate

Function UploadTemplate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-Template"
}
Export-ModuleMember -function UploadTemplate

Function DeleteTemplate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-Template"
}
Export-ModuleMember -function DeleteTemplate

Function ListTemplates
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-Template"
}
Export-ModuleMember -function ListTemplates
# ==================================================
# endregion TEMPLATES
# ==================================================


# ==================================================
# region LOGGING
# ==================================================
Function Get-EmailOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LogEmailConfiguration"
}
Export-ModuleMember -function Get-EmailOption

Function Set-EmailOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [bool]$EmailEnable,

        [string]$EmailServer,

        [ValidateRange(3, 65530)]
        [int]$EmailPort,

        [string]$EmailUser,

        [string]$EmailPassword,

        [string]$EmailDomain,

        [ValidateSet(0, 1, 2, 3)]
        [Int16]$EmailSSLMode,

        [string]$EmailEmergency,

        [string]$EmailCritical,

        [string]$EmailError,

        [string]$EmailWarn,

        [string]$EmailNotice,

        [string]$EmailInfo,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LogEmailConfiguration"
}
Export-ModuleMember -function Set-EmailOption

Function Get-SyslogOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LogSyslogConfiguration"
}
Export-ModuleMember -function Get-SyslogOption

Function Set-SyslogOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$SyslogCritical,
        [string]$SyslogEmergency,
        [string]$SyslogError,
        [string]$SyslogInfo,
        [string]$SyslogNotice,
        [string]$SyslogWarn,

        [UInt16]$SyslogPort,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LogSyslogConfiguration"
}
Export-ModuleMember -function Set-SyslogOption

Function Get-Statistics
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [switch]$VirtualService,
        [switch]$RealServer,
        [switch]$Totals,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LogStatistics"
}
Export-ModuleMember -function Get-Statistics
# ==================================================
# endregion LOGGING
# ==================================================


# ==================================================
# region SSO
# ==================================================
Function UploadRSAConfigurationFile
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-SSORSAConfigurationFile"
}
Export-ModuleMember -function UploadRSAConfigurationFile

Function UploadRSANodeSecretAndPassword
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Password,

        [Parameter(Mandatory=$true)]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-SSORSANodeSecretAndPassword"
}
Export-ModuleMember -function UploadRSANodeSecretAndPassword

Function FlushSsoCache
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Clear-SSOCache"
}
Export-ModuleMember -function FlushSsoCache
# ==================================================
# endregion SSO
# ==================================================


# ==================================================
# region NETWORKING
# ==================================================
Function ListIfconfig
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmNetworkInterface"
}
Export-ModuleMember -function ListIfconfig

Function Get-NetworkOptions
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-NetworkConfiguration"
}
Export-ModuleMember -function Get-NetworkOptions

Function Set-NetworkOptions
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [bool]$SNAT,

        [bool]$AllowUpload,

        [ValidateRange(0, 86400)]
        [Int64]$ConnTimeout,

        [bool]$KeepAlive,

        [bool]$MultiGW,

        [bool]$NonLocalRS,

        [bool]$OnlyDefaultRoutes,

        [bool]$ResetClose,

        [bool]$SubnetOrigin,

        [bool]$SubnetOriginating,

        [bool]$TCPTimeStamp,

        [bool]$RouteFilter,

        [ValidateRange(512, 4096)]
        [Int32]$DHKeySize,

        [string]$Http_Proxy,

    [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-NetworkConfiguration"
}
Export-ModuleMember -function Set-NetworkOptions

Function Get-DNSConfiguration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-NetworkDNSConfiguration"
}
Export-ModuleMember -function Get-DNSConfiguration

Function Set-DNSConfiguration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Hostname,

        [string]$HA1Hostname,

        [string]$HA2Hostname,

        [string]$NameServer,

        [string]$Searchlist,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-NetworkDNSConfiguration"
}
Export-ModuleMember -function Set-DNSConfiguration

Function Update-LmDNSCache
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Update-NetworkDNSCache"
}
Export-ModuleMember -function Update-LmDNSCache

Function Get-SNMPOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-NetworkSNMPConfiguration"
}
Export-ModuleMember -function Get-SNMPOption

Function Set-SNMPOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [bool]$SNMPEnable,
        [bool]$SNMPv3enable,
        [string]$SNMPv3user,
        [string]$SNMPv3userpasswd,

        [ValidateSet("SHA", "MD5")]
        [string]$snmpAuthProt,

        [ValidateSet("AES", "DES")]
        [string]$snmpPrivProt,

        [string]$SNMPClient,
        [string]$SNMPCommunity,
        [string]$SNMPContact,
        [string]$SNMPLocation,
        [bool]$SNMPTrapEnable,
        [bool]$SNMPHaTrap,
        [string]$SNMPv1Sink,
        [string]$SNMPv2Sink,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-NetworkSNMPConfiguration"
}
Export-ModuleMember -function Set-SNMPOption

Function Get-Interface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Int16]$InterfaceID = -1,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-NetworkInterface"
}
Export-ModuleMember -function Get-Interface

Function Set-Interface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Int16]$InterfaceID = 0,

        [string]$IPAddress,

        [Int32]$MTU,

        [bool]$HACheck,

        [bool]$GWIface,

        [bool]$clupdate,

        [bool]$GeoTraffic,

        [ValidateSet("802.3ad", "Active-backup")]
        [string]$BondMode,

        [string]$Partner,

        [string]$Shared,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-NetworkInterface"
}
Export-ModuleMember -function Set-Interface

Function Add-InterfaceAddress
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Int16]$InterfaceID,
        [string]$Address,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-NetworkInterfaceAdditionalAddress"
}
Export-ModuleMember -function Add-InterfaceAddress

Function Remove-InterfaceAddress
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [Int16]$InterfaceID,
        [string]$Address,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-NetworkInterfaceAdditionalAddress"
}
Export-ModuleMember -function Remove-InterfaceAddress

Function Get-Route
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-NetworkRoute"
}
Export-ModuleMember -function Get-Route

Function New-Route
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Destination,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Alias("Mask", "SubnetMask")]
        [Int16]$CIDR,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Gateway,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-NetworkRoute"
}
Export-ModuleMember -function New-Route

Function Remove-Route
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Destination,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-NetworkRoute"
}
Export-ModuleMember -function Remove-Route

Function Register-BondedInterface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Register-NetworkBondedInterface"
}
Export-ModuleMember -function Register-BondedInterface

Function Unregister-BondedInterface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Unregister-NetworkBondedInterface"
}
Export-ModuleMember -function Unregister-BondedInterface

Function Add-BondedInterface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [Parameter(Mandatory=$true)]
        [Int16]$BondID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-NetworkBondedInterface"
}
Export-ModuleMember -function Add-BondedInterface

Function Remove-BondedInterface
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [Parameter(Mandatory=$true)]
        [Int16]$BondID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-NetworkBondedInterface"
}
Export-ModuleMember -function Remove-BondedInterface

Function Add-VLan
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [Parameter(Mandatory=$true)]
        [ValidateRange(1, 4095)]
        [Int16]$VLanId,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-NetworkVLAN"
}
Export-ModuleMember -function Add-VLan

Function Remove-VLan
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-NetworkVLAN"
}
Export-ModuleMember -function Remove-VLan

Function Add-VxLan
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [Parameter(Mandatory=$true)]
        [ValidateRange(1, 16777214)]
        [Int32]$VNI,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Addr,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-NetworkVxLAN"
}
Export-ModuleMember -function Add-VxLan

Function Remove-VxLan
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [Int16]$InterfaceID,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-NetworkVxLAN"
}
Export-ModuleMember -function Remove-VxLan
# ==================================================
# endregion NETWORKING
# ==================================================


# ==================================================
# region ADC
# ==================================================
Function New-VirtualService
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$VirtualService,

        [Parameter(Mandatory=$true)]
        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [Parameter(Mandatory=$true)]
        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [ValidateRange(0, 6)]
        [Int16]$AddVia,

        [string]$Template,

        [bool]$Cache = $false,

        [string]$CertFile,

        [ValidateSet("tcp", "icmp", "https", "http", "smtp", "nntp", "ftp", "telnet", "pop3", "imap", "rdp", "ldap", "none")]
        [string]$CheckType = "tcp",

        [string]$CheckHost,

        [string]$CheckPattern,

        [string]$CheckUrl,

        [string]$CheckHeaders,

        [string]$LdapEndpoint,

        [string]$MatchLen,

        [ValidateRange(0, 1)]
        [int]$CheckUse1_1 = -1,

        [Int32]$CheckPort,

        [bool]$EnhancedHealthChecks,

        [Int32]$RsMinimum,

        [ValidateRange(0, 2)]
        [Int16]$ClientCert = 0,

        [bool]$Compress = $false,

        [string]$Cookie,

        [ValidateRange(0, 100)]
        [Int16]$CachePercent = 0,

        [string]$DefaultGW,

        [bool]$Enable = $true,

        [string]$ErrorCode = 0,

        [string]$ErrorUrl,

        [ValidateRange(3, 65530)]
        [Int32]$PortFollow,

        [bool]$ForceL7 = $true,

        [ValidateRange(0, 86400)]
        [Int32]$Idletime,

        [String[]]$LocalBindAddresses,

        [ValidateSet("gen", "http", "tls", "ts")]
        [string]$VSType,

        [string]$Nickname,

        [ValidateSet("ssl", "cookie", "active-cookie", "cookie-src", "active-cook-src", "cookie-hash",
                     "url", "query-hash", "host", "header", "super", "super-src", "src", "rdp", "rdp-src",
                     "rdp-sb", "udpsip", "none")]
        [string]$Persist,

        [ValidateRange(0, 604800)]
        [Int32]$PersistTimeout,

        [string]$QueryTag,

        [string]$CipherSet,

        [bool]$SSLReencrypt,

        [bool]$SSLReverse,

        [ValidateSet("", "http", "https")]
        [string]$SSLRewrite,

        [string]$ReverseSNIHostname,

        [ValidateSet("rr", "wrr", "lc", "wlc", "fixed", "adaptive", "sh")]
        [string]$Schedule,

        [ValidateRange(0, 5)]
        [Int16]$ServerInit,

        [bool]$SSLAcceleration,

        [string]$StandByAddr,

        [string]$StandByPort,

        [Int32]$TransactionLimit,

        [bool]$Transparent,

        [bool]$SubnetOriginating,

        [bool]$UseforSnat,

        [ValidateSet("0", "1", "2", "4", "8")]
        [string]$QoS,

        [int32]$CheckUseGet,

        [ValidateRange(0, 7)]
        [Int16]$Verify,

        [string]$ExtraHdrKey,

        [string]$ExtraHdrValue,

        [string]$AllowedHosts,

        [string]$AllowedDirectories,

        [string]$AllowedGroups,

        [string]$GroupSIDs,

        [bool]$IncludeNestedGroups,

        [bool]$DisplayPubPriv,

        [bool]$DisablePasswordForm,

        [string]$Domain,

        [string]$AltDomains,

        [string]$Logoff,

        [ValidateRange(0, 7)]
        [Int16]$ESPLogs,

        [string]$SMTPAllowedDomains,

        [bool]$ESPEnabled,

        [string]$UserPwdChangeUrl,

        [string]$UserPwdChangeMsg,

        [ValidateRange(0, 5)]
        [Int16]$InputAuthMode,

        [ValidateRange(0, 2)]
        [Int16]$OutputAuthMode,

        [ValidateRange(0, 1)]
        [Int16]$StartTLSMode,

        [string]$ExtraPorts,

        [string]$AltAddress,

        [bool]$MultiConnect,

        [string]$SingleSignOnDir,

        [string]$OCSPVerify,

        [Int32]$FollowVSID,

        [bool]$TlsType = $false,

        [string]$CheckPostData,

        [string]$CheckCodes,

        [string]$PreProcPrecedence,

        [Int16]$PreProcPrecedencePos,

        [string]$RequestPrecedence,

        [Int16]$RequestPrecedencePos,

        [string]$ResponsePrecedence,

        [Int16]$ResponsePrecedencePos,

        [string]$RsRulePrecedence,

        [Int16]$RsRulePrecedencePos,

        [bool]$NeedHostName,

        [string]$CopyHdrFrom = "",

        [string]$CopyHdrTo = "",

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcVirtualService"
}
Export-ModuleMember -function New-VirtualService

Function Get-VirtualService
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [String]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcVirtualService"
}
Export-ModuleMember -function Get-VirtualService

Function Set-VirtualService
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [Int16]$AddVia,

        [bool]$Cache,

        [string]$CertFile,

        [ValidateSet("tcp", "icmp", "https", "http", "smtp", "nntp", "ftp", "telnet", "pop3", "imap", "rdp", "ldap", "none")]
        [string]$CheckType,

        [string]$CheckHost,

        [string]$CheckPattern,

        [string]$CheckUrl,

        [string]$CheckHeaders,

        [string]$LdapEndpoint,

        [string]$MatchLen,

        [ValidateRange(0, 1)]
        [int]$CheckUse1_1 = -1,

        [Int32]$CheckPort,

        [bool]$EnhancedHealthChecks,

        [Int32]$RsMinimum,

        [ValidateRange(0, 2)]
        [Int16]$ClientCert,

        [bool]$Compress,

        [string]$Cookie,

        [ValidateRange(0, 100)]
        [Int16]$CachePercent,

        [string]$DefaultGW,

        [bool]$Enable,

        [string]$ErrorCode,

        [string]$ErrorUrl,

        [ValidateRange(3, 65530)]
        [Int32]$PortFollow,

        [bool]$ForceL7,

        [ValidateRange(0, 86400)]
        [Int32]$Idletime,

        [String[]]$LocalBindAddresses,

        [ValidateSet("gen", "http", "tls", "ts")]
        [string]$VSType,

        [string]$Nickname,

        [ValidateSet("none", "ssl", "cookie", "active-cookie", "cookie-src", "active-cook-src", "cookie-hash", "url",
                     "query-hash", "host", "header", "super", "super-src", "src", "rdp", "rdp-src", "rdp-sb", "udpsip")]
        [string]$Persist,

        [ValidateRange(0, 604800)]
        [Int32]$PersistTimeout,

        [string]$QueryTag,

        [string]$CipherSet,

        [bool]$SSLReencrypt,

        [bool]$SSLReverse,

        [ValidateSet("", "http", "https")]
        [string]$SSLRewrite,

        [string]$ReverseSNIHostname,

        [ValidateSet("rr", "wrr", "lc", "wlc", "fixed", "adaptive", "sh")]
        [string]$Schedule,

        [ValidateRange(0, 5)]
        [Int16]$ServerInit,

        [bool]$SSLAcceleration,

        [string]$StandByAddr,

        [string]$StandByPort,

        [Int32]$TransactionLimit,

        [bool]$Transparent,

        [bool]$SubnetOriginating,

        [bool]$UseforSnat,

        [ValidateSet("0", "1", "2", "4", "8")]
        [string]$QoS,

        [int32]$CheckUseGet,

        [ValidateRange(0, 7)]
        [Int16]$Verify,

        [string]$ExtraHdrKey,

        [string]$ExtraHdrValue,

        [string]$AllowedHosts,

        [string]$AllowedDirectories,

        [string]$AllowedGroups,

        [string]$GroupSIDs,

        [bool]$IncludeNestedGroups,

        [bool]$DisplayPubPriv,

        [bool]$DisablePasswordForm,

        [string]$Domain,

        [string]$AltDomains,

        [string]$Logoff,

        [ValidateRange(0, 7)]
        [Int16]$ESPLogs,

        [string]$SMTPAllowedDomains,

        [bool]$ESPEnabled,

        [string]$UserPwdChangeUrl,

        [string]$UserPwdChangeMsg,

        [ValidateRange(0, 5)]
        [Int16]$InputAuthMode,

        [ValidateRange(0, 1)]
        [Int16]$OutputAuthMode,

        [ValidateRange(0, 1)]
        [Int16]$StartTLSMode,

        [string]$ExtraPorts,

        [string]$AltAddress,

        [bool]$MultiConnect,

        [string]$SingleSignOnDir,

        [string]$OCSPVerify,

        [Int32]$FollowVSID,

        [bool]$TlsType = $false,

        [string]$CheckPostData,

        [string]$CheckCodes,

        [string]$PreProcPrecedence,

        [Int16]$PreProcPrecedencePos,

        [string]$RequestPrecedence,

        [Int16]$RequestPrecedencePos,

        [string]$ResponsePrecedence,

        [Int16]$ResponsePrecedencePos,

        [string]$RsRulePrecedence,

        [Int16]$RsRulePrecedencePos,

        [bool]$NeedHostName,

        [string]$CopyHdrFrom,

        [string]$CopyHdrTo,

        [string]$ServerFbaPath,

        [string]$ServerFbaPost,

        [bool]$Intercept,

        [bool]$AllowHTTP2,

        [ValidateNotNullOrEmpty()]
        [string]$InterceptOpts,

        [ValidateNotNullOrEmpty()]
        [string]$InterceptRules,

        [ValidateRange(0, 100000)]
        [int32]$AlertThreshold,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcVirtualService"
}
Export-ModuleMember -function Set-VirtualService

Function Remove-VirtualService
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [Parameter(ParameterSetName="IPAddress",ValueFromPipelineByPropertyName=$true)]
        [Parameter(ParameterSetName="Credential")]
        [Parameter(ParameterSetName="Certificate")]
        [string]$VirtualService,

        [Parameter(ParameterSetName="IPAddress",ValueFromPipelineByPropertyName=$true)]
        [Parameter(ParameterSetName="Credential")]
        [Parameter(ParameterSetName="Certificate")]
        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [Parameter(ParameterSetName="IPAddress",ValueFromPipelineByPropertyName=$true)]
        [Parameter(ParameterSetName="Credential")]
        [Parameter(ParameterSetName="Certificate")]
        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Parameter(ParameterSetName="Index",ValueFromPipelineByPropertyName=$true)]
        [Parameter(ParameterSetName="Credential")]
        [Parameter(ParameterSetName="Certificate")]
        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcVirtualService"
}
Export-ModuleMember -function Remove-VirtualService

Function New-RealServer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [Parameter(Mandatory=$true)]
        [ValidateRange(3, 65530)]
        [Int32]$RealServerPort,

        [ValidateRange(1, 65530)]
        [Int32]$Weight,

        [ValidateSet("nat", "route")]
        [string]$Forward = "nat",

        [bool]$Enable = $true,

        [bool]$Non_Local = $false,

        [ValidateRange(0, 100000)]
        [Int64]$Limit = 0,

        [bool]$Critical,

        [ValidateRange(0, 65535)]
        [Int32]$Follow,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcRealServe"
}
Export-ModuleMember -function New-RealServer

Function Remove-RealServer
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [ValidateRange(3, 65530)]
        [Int32]$RealServerPort,

        [Int32]$RSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcRealServer"
}
Export-ModuleMember -function Remove-RealServer

Function Set-RealServer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [ValidateRange(3, 65530)]
        [Int32]$RealServerPort,

        [Int32]$RSIndex = -1,

        [ValidateRange(3, 65530)]
        [Int32]$NewPort,

        [ValidateRange(1, 65530)]
        [Int32]$Weight,

        [ValidateSet("nat", "route")]
        [string]$Forward = "nat",

        [bool]$Enable = $true,

        [ValidateRange(0, 100000)]
        [Int64]$Limit = 0,

        [bool]$Critical,

        [ValidateRange(0, 65535)]
        [Int32]$Follow,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcRealServer"
}
Export-ModuleMember -function Set-RealServer

Function Get-RealServer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [String]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [ValidateRange(3, 65530)]
        [Int32]$RSPort,

        [Int32]$RSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcRealServer"
}
Export-ModuleMember -function Get-RealServer

Function Enable-RealServer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RSIpAddress,

        [ValidateRange(3, 65530)]
        [Int32]$RSPort,

        [ValidateNotNullOrEmpty()]
        [string]$RSFqdn,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Enable-AdcRealServer"
}
Export-ModuleMember -function Enable-RealServer

Function Disable-RealServer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RSIpaddress,

        [ValidateRange(3, 65530)]
        [Int32]$RSPort,

        [ValidateNotNullOrEmpty()]
        [string]$RSFqdn,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Disable-AdcRealServer"
}
Export-ModuleMember -function Disable-RealServer

Function Remove-AdcVirtualServerRule
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [Parameter(Mandatory=$true)]
        [ValidateSet("pre", "response", "request")]
        [string]$RuleType,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcVirtualServiceRule"
}
Export-ModuleMember -function Remove-AdcVirtualServerRule

Function Remove-VirtualServerRule
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [Parameter(Mandatory=$true)]
        [ValidateSet("pre", "response", "request")]
        [string]$RuleType,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcVirtualServiceRule"
}
Export-ModuleMember -function Remove-VirtualServerRule

Function New-RealServerRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [ValidateRange(3, 65530)]
        [Int32]$RSPort,

        [Int32]$RSIndex = -1,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcRealServerRule"
}
Export-ModuleMember -function New-RealServerRule

Function Remove-RealServerRule
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$VirtualService,

        [ValidateRange(3, 65530)]
        [Int32]$VSPort,

        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Int32]$VSIndex = -1,

        [ValidateNotNullOrEmpty()]
        [string]$RealServer,

        [ValidateRange(3, 65530)]
        [Int32]$RSPort,

        [Int32]$RSIndex = -1,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RuleName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcRealServerRule"
}
Export-ModuleMember -function Remove-RealServerRule

Function New-Rule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory=$true)]
        [string]$RuleName,

        [ValidateSet("regex", "prefix", "postfix")]
        [string]$MatchType = "regex",

        [bool]$IncHost = $false,

        [bool]$NoCase = $false,

        [bool]$Negate = $false,

        [bool]$IncQuery = $false,

        [string]$Header,

        [string]$Pattern,

        [string]$Replacement,

        [ValidateRange(0, 5)]
        [Int32]$Type,        # TODO: to change Type to RuleType. Pay attention to the mapping
                        # to add values range
                        # EVEN BETTER: set the RuleType to string as in Get-AdcContentRule with the
                        # same values and maps the string type to the corrispondent integer value.

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcContentRule"
}
Export-ModuleMember -function New-Rule

Function Remove-Rule
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [string]$RuleName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-AdcContentRule"
}
Export-ModuleMember -function Remove-Rule

Function Set-Rule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory=$true)]
        [string]$RuleName,

        [ValidateSet("regex", "prefix", "postfix")]
        [string]$MatchType = "regex",

        [bool]$IncHost,

        [bool]$NoCase,

        [bool]$Negate,

        [bool]$IncQuery,

        [string]$Header,

        [string]$Pattern,

        [string]$Replacement,

        [ValidateRange(0, 5)]
        [Int32]$Type,        # TODO: to change Type to RuleType. Pay attention to the mapping
                        # to add values range
                        # EVEN BETTER: set the RuleType to string as in Get-AdcContentRule with the
                        # same values and maps the string type to the corrispondent integer value.

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcContentRule"
}
Export-ModuleMember -function Set-Rule

Function Get-Rule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$RuleName,

        [ValidateSet("MatchContentRule", "AddHeaderRule", "DeleteHeaderRule", "ReplaceHeaderRule", "ModifyUrlRule", "ReplaceBodyRule")]
        [string]$RuleType,

        [switch]$All,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcContentRule"
}
Export-ModuleMember -function Get-Rule

Function Get-L7Configuration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcL7Configuration"
}
Export-ModuleMember -function Get-L7Configuration

Function Set-L7Configuration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [bool]$ScalingOver64KConnections,

        [ValidateSet("No", "Yes", "Yes - Accept Changes")]
        [string]$AlwaysCheckPersist,

        [bool]$AddPortToActiveCookie,

        [bool]$RFCConform,

        [bool]$CloseOnError,

        [bool]$AddViaHeaderInCacheResponses,

        [bool]$RSAreLocal,

        [bool]$DropOnRSFail,

        [bool]$DropAtDrainEnd,

        [ValidateRange(30, 300)]
        [Int16]$L7AuthTimeoutSecs,

        [ValidateRange(60, 300)]
        [Int16]$L7ClientTokenTimeoutSecs,

        [int]$L7ConnectionDrainTimeoutSecs,

        [ValidateSet("X-ClientSide", "X-Forwarded-For", "None")]
        [string]$AdditionalL7Header,

        [ValidateSet("RFC-2616 Compliant", "Require 100-Continue", "RFC-7231 Compliant")]
        [string]$OneHundredContinueHandling,

        [bool]$AllowEmptyPosts,

        [bool]$AllowEmptyHttpHeaders,

        [bool]$ForceCompleteRSMatch,

        [ValidateRange(0, 600)]
        [Int16]$SlowStart,

        [bool]$ShareSubVSPersistance,

        #[bool]$Transparent, # FIXME: still available?

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcL7Configuration"
}
Export-ModuleMember -function Set-L7Configuration

Function Get-LogSplitInterval
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    param(
        [validatenotnullorempty()]
        [string]$LoadBalancer = $loadbalanceraddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcL7LogInsightSplitConfiguration"
}
Export-ModuleMember -function Get-LogSplitInterval

Function Set-LogSplitInterval
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param( 
        [Parameter(Mandatory=$true)]
        [string]$logsplitinterval,    

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcL7LogInsightSplitConfiguration"
}
Export-ModuleMember -function Set-LogSplitInterval

Function Get-ServiceHealth
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcServiceHealth"
}
Export-ModuleMember -function Get-ServiceHealth

Function Set-ServiceHealth
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateRange(9, 120)]
        [Int16]$CheckInterval,

        [ValidateRange(4, 60)]
        [Int16]$ConnectTimeout,

        [ValidateRange(2, 15)]
        [Int16]$RetryCount,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcServiceHealth"
}
Export-ModuleMember -function Set-ServiceHealth

Function Add-NoCompressExtension
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [ValidatePattern({^\.})]
        [String[]]$Extension,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcHttpCompressionException"
}
Export-ModuleMember -function Add-NoCompressExtension

Function Remove-NoCompressExtension
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [ValidatePattern({^\.})]
        [String[]]$Extension,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-AdcServiceHealth"
}
Export-ModuleMember -function Remove-NoCompressExtension

Function Add-NoCacheExtension
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [ValidatePattern({^\.})]
        [String[]]$Extension,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcHttpCacheException"
}
Export-ModuleMember -function Add-NoCacheExtension

Function Remove-NoCacheExtension
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [ValidatePattern({^\.})]
        [String[]]$Extension,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-AdcHttpCacheException"
}
Export-ModuleMember -function Remove-NoCacheExtension

Function Get-AdaptiveCheck
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcAdaptiveHealthCheck"
}
Export-ModuleMember -function Get-AdaptiveCheck

Function Set-AdaptiveCheck
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$AdaptiveURL,
        [Int32]$AdaptivePort,
        [ValidateRange(10, 60)]
        [Int32]$AdaptiveInterval,
        [Int16]$MinPercent,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-AdcAdaptiveHealthCheck"
}
Export-ModuleMember -function Set-AdaptiveCheck

Function VSAddWafRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VS,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VSPort,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Parameter(Mandatory=$true)]
        [string]$Rule,

        [ValidateNotNullOrEmpty()]
        [string]$Enablerules,

        [ValidateNotNullOrEmpty()]
        [string]$Disablerules,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-AdcVsWafRule"
}
Export-ModuleMember -function VSAddWafRule

Function VSRemoveWafRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VS,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VSPort,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Rule,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-AdcVsWafRule"
}
Export-ModuleMember -function VSRemoveWafRule

Function VSListWafRuleIds
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VS,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$VSPort,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet("tcp", "udp")]
        [string]$VSProtocol,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Rule,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-AdcVsWafRule"
}
Export-ModuleMember -function VSListWafRuleIds
# ==================================================
# endregion ADC
# ==================================================


# ==================================================
# region SECURITY
# ==================================================
Function Set-AdminAccess
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateRange(0, 99)]
        [Int32]$WuiNetworkInterfaceId = -1,

        [Parameter(Mandatory=$true)]
        [ValidateRange(3, 65530)]
        [int32]$WuiPort = -1,

        [string]$WuiDefaultGateway,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SecAdminAccess"
}
Export-ModuleMember -function Set-AdminAccess

Function Get-WUIAuth
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-SecWuiAuthentication"
}
Export-ModuleMember -function Get-WUIAuth

Function Set-WUIAuth
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$RADIUSServer,

        [ValidateRange(3, 65530)]
        [Int64]$RADIUSPort,

        [string]$RADIUSSecret,

        [string]$RADIUSBackupServer,

        [ValidateRange(3, 65530)]
        [Int64]$RADIUSBackupPort,

        [string]$RADIUSBackupSecret,

        [int]$RADIUSRevalidateInterval,

        [string]$WuiLdapEp,

        [bool]$SessionLocalAuth,

        [ValidateSet(7, 22, 23, 262, 263, 278, 279, 772, 773, 774, 775, 788, 789, 790, 791)]
        [Int16]$SessionAuthMode,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SecWuiAuthentication"
}
Export-ModuleMember -function Set-WUIAuth

Function Get-WUISetting
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-SecAdminWuiConfiguration"
}
Export-ModuleMember -function Get-WUISetting

Function Set-WUISetting
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateRange(0, 14)]
        [int]$WUITLSProtocols,

        [ValidateSet("Default", "Default_NoRc4", "BestPractices", "Intermediate_compatibility", "Backward_compatibility", "WUI", "FIPS", "Legacy")]
        [string]$WUICipherset,

        [bool]$sessioncontrol,

        [bool]$sessionbasicauth,

        [ValidateRange(1, 999)]
        [Int16]$sessionmaxfailattempts,

        [ValidateRange(60, 86400)]
        [Int32]$sessionidletime,

        [ValidateRange(0, 9)]
        [Int16]$sessionconcurrent,

        [string]$wuipreauth,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SecAdminWuiConfiguration"
}
Export-ModuleMember -function Set-WUISetting

Function UserSetSystemPassword
{    
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [String]$CurrentPassword,

        [Parameter(Mandatory=$true)]
        [String]$NewPassword,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.Credential()]$Credential = $script:cred
    )
    Write-Output "$warning Set-SecSystemUserPassword"
}
Export-ModuleMember -function UserSetSystemPassword

Function UserSetPermissions
{    
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [String]$User,

        [Parameter(Mandatory=$true)]
        [String]$Permissions,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SecUserPermission"
}
Export-ModuleMember -function UserSetPermissions

Function UserChangeLocalPassword
{    
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [String]$User,

        [Parameter(Mandatory=$true)]
        [String]$Password,

        [Parameter(Mandatory=$true)]
        [ValidateRange(0, 1)]
        [int]$Radius,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SecUserPassword"
}
Export-ModuleMember -function UserChangeLocalPassword
# ==================================================
# endregion SECURITY
# ==================================================


# ==================================================
# region SYSTEM
# ==================================================
Function Initialize-LoadBalancer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Address,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = 443,

        [Parameter(ParameterSetName="Credential")]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.Credential()]$Credential = [System.Management.Automation.PSCredential]::Empty,

        [Parameter(ParameterSetName="Certificate")]
        [ValidateNotNullOrEmpty()]
        [String]$CertificateStoreLocation = $null,

        [Parameter(ParameterSetName="Certificate")]
        [ValidateNotNullOrEmpty()]
        [String]$SubjectCN = $null
    )
    Write-Output "$warning Initialize-LmConnectionParameters"
}
Export-ModuleMember -function Initialize-LoadBalancer

Function Test-ServerConnection
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$ComputerName,

        [ValidateRange(3, 65530)]
        [Int32]$Port
    )
    Write-Output "$warning Test-LmServerConnection"
}
Export-ModuleMember -function Test-ServerConnection
# ==================================================
# endregion SYSTEM
# ==================================================


# ==================================================
# region GET-SET
# ==================================================
Function Get-AllParameters
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmAllParameters"
}
Export-ModuleMember -function Get-AllParameters, Get-AllParameters

Function Get-Parameter
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Param,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmParameter"
}
Export-ModuleMember -function Get-Parameter

Function Set-Parameter
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Param,

        [Parameter(Mandatory=$true)]
        [AllowEmptyString()]
        [String]$Value = "",

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN

    )
    Write-Output "$warning Set-LmParameter"
}
Export-ModuleMember -function Set-Parameter

# ==================================================
# endregion GET-SET
# ==================================================


# ==================================================
# region TLS
# ==================================================
Function New-Certificate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [string]$Password,

        [switch]$Replace,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-TlsCertificate"
}
Export-ModuleMember -function New-Certificate

Function ListCert
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$CertName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-TlsCertificate"
}
Export-ModuleMember -function ListCert

Function Remove-Certificate
{
    [cmdletbinding(SupportsShouldProcess=$true,ConfirmImpact="High",DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-TlsCertificate"
}
Export-ModuleMember -function Remove-Certificate

Function Backup-Certificate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateLength(6, 64)]
        [string]$Password,

        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Backup-TlsCertificate"
}
Export-ModuleMember -function Backup-Certificate

Function Restore-Certificate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateLength(6, 64)]
        [string]$Password,

        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateSet("Full", "VS", "Third")]
        [string]$Type,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Restore-TlsCertificate"
}
Export-ModuleMember -function Restore-Certificate

Function New-IntermediateCertificate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Name,

        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-TlsIntermediateCertificate"
}
Export-ModuleMember -function New-IntermediateCertificate

Function Remove-IntermediateCertificate
{
    [cmdletbinding(SupportsShouldProcess=$true,ConfirmImpact="High",DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Remove-TlsIntermediateCertificate"
}
Export-ModuleMember -function Remove-IntermediateCertificate

Function GetCipherset
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-TlsCipherSet"
}
Export-ModuleMember -function GetCipherset

Function ModifyCipherset
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Value,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-TlsCipherSet"
}
Export-ModuleMember -function ModifyCipherset

Function DelCipherset
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-TlsCipherSet"
}
Export-ModuleMember -function DelCipherset

Function HSMShow
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-TlsHSM"
}
Export-ModuleMember -function HSMShow

Function HSMConfigure
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [String]$Sethsm,
        [String]$Safeaddr,
        [String]$Clpass,
        [bool]$Enable,
        [String]$Cavhsmaddr,
        [String]$Cavhsmpasswd,
        [String]$Cavhsmuser,
        [bool]$Cavhsmenable,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-TlsHSM"
}
Export-ModuleMember -function HSMConfigure

Function HSMGenerateClientCert
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Clcertname,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning New-TlsHSMClientCert"
}
Export-ModuleMember -function HSMGenerateClientCert

Function HSMUploadCACert
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-TlsHSMCACert"
}
Export-ModuleMember -function HSMUploadCACert
# ==================================================
# endregion TLS
# ==================================================


# ==================================================
# region WAF
# ==================================================
Function ListWafRules
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-WafRules"
}
Export-ModuleMember -function ListWafRules

Function AddWafCustomData
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-WafCustomRuleData"
}
Export-ModuleMember -function AddWafCustomData

Function DownloadWafCustomData
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RuleDataName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Export-WafCustomRuleData"
}
Export-ModuleMember -function DownloadWafCustomData

Function DelWafCustomData
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Filename,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Uninstall-WafCustomRuleData"
}
Export-ModuleMember -function DelWafCustomData

Function AddWafCustomRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-WafCustomRuleSet"
}
Export-ModuleMember -function AddWafCustomRule

Function DelWafCustomRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Filename,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Uninstall-WafCustomRuleSet"
}
Export-ModuleMember -function DelWafCustomRule

Function DownloadWafCustomRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RuleSetName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Export-WafCustomRuleSet"
}
Export-ModuleMember -function DownloadWafCustomRule

Function EnableWafRemoteLogging
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$RemoteURI,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Username,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Passwd,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Enable-WafRemoteLogging"
}
Export-ModuleMember -function EnableWafRemoteLogging
    
Function DisableWafRemoteLogging
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Disable-WafRemoteLogging"
}
Export-ModuleMember -function DisableWafRemoteLogging

Function ListWafAuditFiles
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-WafAuditFiles"
}
Export-ModuleMember -function ListWafAuditFiles

Function DownloadWafAuditLog
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$AuditFile,

        [string]$Filter,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Export-WafAuditLog"
}
Export-ModuleMember -function DownloadWafAuditLog

Function GetWafChangeLog
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Export-WafChangeLog"
}
Export-ModuleMember -function GetWafChangeLog

Function ManInstallWafRules
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-WafRulesDatabase"
}
Export-ModuleMember -function ManInstallWafRules

Function DownloadWafRules
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Update-WafRulesDatabase"
}
Export-ModuleMember -function DownloadWafRules

Function GetWafSettings
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-WafRulesAutoUpdateConfiguration"
}
Export-ModuleMember -function GetWafSettings
# ==================================================
# endregion WAF
# ==================================================


# ==================================================
# region GEO
# ==================================================
Function AddFQDN
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoFQDN"
}
Export-ModuleMember -function AddFQDN

Function Add-GeoFQDN
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoFQDN"
}
Export-ModuleMember -function Add-GeoFQDN

Function DeleteFQDN
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoFQDN"
}
Export-ModuleMember -function DeleteFQDN

Function ListFQDNs
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoFQDN"
}
Export-ModuleMember -function ListFQDNs

Function ModifyFQDN
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [ValidateSet("RoundRobin", "WeightedRoundRobin", "FixedWeighting", "RealServerLoad", "Proximity", "LocationBased", "AllAvailable")]
        [String]$SelectionCriteria,

        [ValidateRange(0, 1440)]
        [Int32]$SiteFailureDelay = -1,

        [ValidateSet("auto", "manual")]
        [String]$SiteRecoveryMode,

        [ValidateSet("PublicSitesOnly", "PreferPublicSites", "PreferPrivateSites", "AllSites")]
        [string]$PublicRequest,

        [ValidateSet("PrivateSitesOnly", "PreferPrivateSites", "PreferPublicSites", "AllSites")]
        [string]$PrivateRequest,

        [String]$Failover,

        [bool]$LocalSettings,

        [ValidateRange(1, 86400)]
        [Int32]$localttl,

        [ValidateRange(0, 86400)]
        [Int32]$localsticky,

        [bool]$UnanimousChecks,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoFQDN"
}
Export-ModuleMember -function ModifyFQDN

Function AddCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ClusterName,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoCluster"
}
Export-ModuleMember -function AddCluster

Function DeleteCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoCluster"
}
Export-ModuleMember -function DeleteCluster

Function Get-GeoCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoCluster"
}
Export-ModuleMember -function ListClusters

Function ShowCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoCluster"
}
Export-ModuleMember -function ShowCluster

Function ModifyCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [String]$ClusterName,

        [ValidateSet("default", "remoteLM", "localLM")]
        [String]$Type,

        [ValidateSet("none", "tcp", "icmp")]
        [String]$Checker,

        [Int32]$CheckerPort,

        [String]$Enable,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoCluster"
}
Export-ModuleMember -function ModifyCluster

Function ClusterChangeLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ClusterIp,

        [Parameter(Mandatory=$true)]
        [Int32]$LatSecs,

        [Parameter(Mandatory=$true)]
        [Int32]$LongSecs,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoClusterCoordinates"
}
Export-ModuleMember -function ClusterChangeLocation

Function AddMap
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [string]$Cluster,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoFQDNSiteAddress"
}
Export-ModuleMember -function AddMap

Function DeleteMap
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoFQDNSiteAddress"
}
Export-ModuleMember -function DeleteMap

Function ModifyMap
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [ValidateSet("None", "Icmp Ping", "Tcp Connect", "Cluster Checks")]
        [String]$Checker,

        [Int32]$Weight,

        [String]$Enable,

        [String]$Cluster,

        [String]$Mapaddress,

        [String]$Mapport,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoFQDNSiteAddress"
}
Export-ModuleMember -function ModifyMap

Function ChangeCheckerAddr
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$CheckerIP,

        [Parameter(Mandatory=$true,Position=3)]
        [ValidateNotNullOrEmpty()]
        [String]$CheckerPort,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoFQDNSiteCheckerAddress"
}
Export-ModuleMember -function ChangeCheckerAddr

Function AddCountry
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,    # was IP

        [ValidateNotNullOrEmpty()]
        [String]$CountryCode,

        [ValidateNotNullOrEmpty()]
        [String]$IsContinent,

        [ValidateNotNullOrEmpty()]
        [String]$CustomLocation,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoFQDNSiteCountry"
}
Export-ModuleMember -function AddCountry

Function RemoveCountry
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [ValidateNotNullOrEmpty()]
        [String]$CountryCode,

        [ValidateNotNullOrEmpty()]
        [String]$IsContinent,

        [ValidateNotNullOrEmpty()]
        [String]$CustomLocation,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoFQDNSiteCountry"
}
Export-ModuleMember -function RemoveCountry

Function ChangeMapLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$FQDN,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SiteAddress,

        [Parameter(Mandatory=$true)]
        [Int32]$Lat,

        [Parameter(Mandatory=$true)]
        [Int32]$Long,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoFQDNSiteCoordinates"
}
Export-ModuleMember -function ChangeMapLocation

Function AddCustomLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Location,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoCustomLocation"
}
Export-ModuleMember -function AddCustomLocation

Function DeleteCustomLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Location,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoCustomLocation"
}
Export-ModuleMember -function DeleteCustomLocation

Function ListCustomLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoCustomLocation"
}
Export-ModuleMember -function ListCustomLocation

Function EditCustomLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$clOldName,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$clNewName,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoCustomLocation"
}
Export-ModuleMember -function EditCustomLocation

Function AddIP
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-GeoIpRange"
}
Export-ModuleMember -function AddIP

Function DeleteIP
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoIpRange"
}
Export-ModuleMember -function DeleteIP

Function ShowIP
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoIpRange"
}
Export-ModuleMember -function ShowIP

Function ListIPs
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoIpRange"
}
Export-ModuleMember -function ListIPs

Function ModifyIPLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [Parameter(Mandatory=$true)]
        [Int32]$Lat,

        [Parameter(Mandatory=$true)]
        [Int32]$Long,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoIPRangeCoordinates"
}
Export-ModuleMember -function ModifyIPLocation

Function DeleteIPLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoIPRangeCoordinates"
}
Export-ModuleMember -function DeleteIPLocation

Function AddIPCountry
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [Parameter(Mandatory=$true)]
        [String]$CountryCode,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoIPRangeCountry"
}
Export-ModuleMember -function AddIPCountry

Function RemoveIPCountryCustom
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true,Position=0)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoIPRangeCountry"
}
Export-ModuleMember -function RemoveIPCountryCustom 

Function Remove-GeoIPRangeCustomLocation
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true,Position=0)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoIPRangeCountry"
}
Export-ModuleMember -function Remove-GeoIPRangeCustomLocation

Function RemoveIPCountry
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true,Position=0)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-GeoIPRangeCountry"
}
Export-ModuleMember -function RemoveIPCountry 

Function AddIPCountryCustom
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IP,

        [Parameter(Mandatory=$true)]
        [String]$CustomLoc,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoIPRangeCustomLocation"
}
Export-ModuleMember -function AddIPCountryCustom

Function ListMiscParameters
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-GeoMiscParameter"
}
Export-ModuleMember -function ListMiscParameters

Function ModifyMiscParameters
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [String]$SourceOfAuthority,
        [String]$NameSrv,
        [String]$SOAEmail,
        [String]$TTL,
        [String]$Persist,
        [String]$CheckInterval,
        [String]$ConnTimeout,
        [String]$RetryAttempts,
        [String]$Zone,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-GeoMiscParameter"
}
Export-ModuleMember -function ModifyMiscParameters

Function LocationDataUpdate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Update-GeoDatabase"
}
Export-ModuleMember -function LocationDataUpdate

Function EnableGEO
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Update-GeoDatabase"
}
Export-ModuleMember -function EnableGEO

Function DisableGEO
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,
        
        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Disable-LmGeoPack"
}
Export-ModuleMember -function DisableGEO

Function IsGEOEnabled
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Disable-LmGeoPack"
}
Export-ModuleMember -function IsGEOEnabled
# ==================================================
# endregion GEO
# ==================================================


# ==================================================
# region BACKUP
# ==================================================
Function Backup-LoadBalancer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Path,
        [switch]$Force,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Backup-LmConfiguration"
}
Export-ModuleMember -function Backup-LoadBalancer

Function Restore-LoadBalancer
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateSet("Base", "Base + VS", "Base + Geo", "VS", "VS + Geo", "Geo", "SSO/LDAP", "All")]
        [string]$Type,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Restore-LmConfiguration"
}
Export-ModuleMember -function Restore-LoadBalancer

Function Get-BackupOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmBackupConfiguration"
}
Export-ModuleMember -function Get-BackupOption

Function Set-BackupOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateSet("yes", "no")]
        [string]$BackupEnable,

        [ValidateRange(0, 23)]
        [Int16]$BackupHour,

        [ValidateRange(0, 59)]
        [Int16]$BackupMinute,

        [ValidateRange(0, 7)]
        [Int16]$BackupDay,

        [ValidateSet("Ftp", "SCP")]
        [string]$BackupMethod,

        [string]$BackupUser,

        [string]$BackupPassword,

        [string]$BackupHost,

        [string]$BackupPath,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmBackupConfiguration"
}
Export-ModuleMember -function Set-BackupOption
# ==================================================
# endregion BACKUP
# ==================================================


# ==================================================
# region VPN
# ==================================================
Function CreateVpnConnection
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-LmVpnConnection"
}
Export-ModuleMember -function CreateVpnConnection

Function DeleteVpnConnection
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-LmVpnConnection"
}
Export-ModuleMember -function DeleteVpnConnection

Function ListVpns
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmVpnConnection"
}
Export-ModuleMember -function ListVpns

Function SetVpnAddrs
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$LocalIp,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$LocalSubnets,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RemoteIp,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RemoteSubnets,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnAddrs"
}
Export-ModuleMember -function SetVpnAddrs

Function SetVpnLocalIp
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$LocalIp,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnLocalIp"
}
Export-ModuleMember -function SetVpnLocalIp

Function SetVpnLocalSubnets
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$LocalSubnets,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnLocalIp"
}
Export-ModuleMember -function SetVpnLocalSubnets

Function SetVpnRemoteIp
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RemoteIp,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnRemoteIp"
}
Export-ModuleMember -function SetVpnRemoteIp

Function SetVpnRemoteSubnets
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RemoteSubnets,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnRemoteSubnet"
}
Export-ModuleMember -function SetVpnRemoteSubnets

Function SetVpnSecret
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$LocalId,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$RemoteId,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Key,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnSecret"
}
Export-ModuleMember -function SetVpnSecret

Function StartVpnConnection
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Start-LmVpnConnection"
}
Export-ModuleMember -function StartVpnConnection

Function StopVpnConnection
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Stop-LmVpnConnection"
}
Export-ModuleMember -function StopVpnConnection

Function StartIkeDaemon
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Start-LmVpnIkeDaemon"
}
Export-ModuleMember -function StartIkeDaemon

Function StopIkeDaemon
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Stop-LmVpnIkeDaemon"
}
Export-ModuleMember -function StopIkeDaemon

Function StatusIkeDaemon
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmVpnIkeDaemonStatus"
}
Export-ModuleMember -function StatusIkeDaemon

Function SetVpnPfsEnable
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnPfsEnable"
}
Export-ModuleMember -function SetVpnPfsEnable

Function SetVpnPfsDisable
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()] 
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmVpnPfsDisable"
}
Export-ModuleMember -function SetVpnPfsDisable
# ==================================================
# endregion VPN
# ==================================================


# ==================================================
# region ADDON
# ==================================================
Function UploadAddon
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-LmAddon"
}
Export-ModuleMember -function UploadAddon

Function DeleteAddon
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Name,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-LmAddon"
}
Export-ModuleMember -function DeleteAddon

Function ListAddons
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmAddOn"
}
Export-ModuleMember -function ListAddons
# ==================================================
# endregion ADDON
# ==================================================


# ==================================================
# region PATCH
# ==================================================
Function Install-Patch
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateScript({Test-Path $_})]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Install-LmPatch"
}
Export-ModuleMember -function Install-Patch

Function Restore-Patch
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Uninstall-LmPatch"
}
Export-ModuleMember -function Restore-Patch

Function Restart-LoadBalancer
{
    [cmdletbinding(SupportsShouldProcess=$true, ConfirmImpact="High", DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Shutdown,
        [switch]$Force,
        [int]$SleepTime,
        [int]$Cycles
    )
    Write-Output "$warning Restart-Lm"
}
Export-ModuleMember -function Restart-LoadBalancer
# ==================================================
# endregion PATCH
# ==================================================


# ==================================================
# region DATE-TIME
# ==================================================
Function Get-DateTimeOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmDateTimeConfiguration"
}
Export-ModuleMember -function Get-DateTimeOption

Function Set-DateTimeOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [string]$NTPHost,

        [string]$TimeZone,

        [ValidateRange(1, 100)]
        [int]$NTPKeyId,

        [string]$NTPKeySecret,

        [ValidateSet("SHA-1", "MD5")]
        [string]$NTPKeyType,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmDateTimeConfiguration"
}
Export-ModuleMember -function Set-DateTimeOption
# ==================================================
# endregion DATE-TIME
# ==================================================


# ==================================================
# region SDN
# ==================================================
Function AddSDNController
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$IPV4,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Int32]$Port,

        [Int32]$Clid,

        [Boolean]$Https,

        [String]$User,

        [String]$Password,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-SdnController"
}
Export-ModuleMember -function AddSDNController

Function DeleteSDNController
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Int32]$Clid,

        [Int32]$Cid,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-SdnController"
}
Export-ModuleMember -function DeleteSDNController

Function ModifySDNController
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Int32]$Cid,

        [Int32]$Clid,

        [String]$IPV4,

        [Int32]$Port,

        [Boolean]$Https,

        [String]$User,

        [String]$Password,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-SdnController"
}
Export-ModuleMember -function ModifySDNController

Function GetSDNController
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-SdnController"
}
Export-ModuleMember -function GetSDNController
# ==================================================
# endregion SDN
# ==================================================


# ==================================================
# region AFE
# ==================================================
Function Get-AFEConfiguration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmAFEConfiguration"
}
Export-ModuleMember -function Get-AFEConfiguration

Function Set-AFEConfiguration
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateRange(1, 409)]
        [Int]$CacheSize,

        [bool]$HostCache,

        [ValidateSet("Low - Only logging, no rejection", "Default - Only Critical problems are rejected", "High - Serious and Critical problems are rejected", "Paranoid - All problems detected are rejected")]
        [string]$DetectionLevel,

        [ValidateRange(0, 100000)]
        [Int64]$LimitInput,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmAFEConfiguration"
}
Export-ModuleMember -function Set-AFEConfiguration

Function Update-IDSRule
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateScript({Test-Path -Path $_})]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Update-AFEIDSRules"
}
Export-ModuleMember -function Update-IDSRule
# ==================================================
# endregion AFE
# ==================================================


# ==================================================
# region CONNLIMIT
# ==================================================
Function AfeClientLimitList
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmIPConnectionLimit"
}
Export-ModuleMember -function AfeClientLimitList

Function AfeClientLimitAdd
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [String]$L7addr,

        [Parameter(Mandatory=$true)]
        [int32]$L7limit,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-LmIPConnectionLimit"
}
Export-ModuleMember -function AfeClientLimitAdd

Function AfeClientLimitDelete
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [String]$L7addr,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-LmIPConnectionLimit"
}
Export-ModuleMember -function AfeClientLimitDelete
# ==================================================
# endregion CONNLIMIT
# ==================================================


# ==================================================
# region CLUSTER
# ==================================================
Function Get-HAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmHAConfiguration"
}
Export-ModuleMember -function Get-HAOption

Function Set-HAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateSet(3, 6, 9, 12, 15)]
        [Int16]$hatimeout,

        [ValidateRange(0, 180)]
        [Int16]$hawait,

        [ValidateRange(1, 255)]
        [Int16]$havhid,

        [ValidateSet("No Preferred Host", "Prefer First HA", "Prefer Second HA")]
        [string]$haprefered,

        [Int16]$haif,

        [bool]$hal4update,

        [bool]$hal7update,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmHAConfiguration"
}
Export-ModuleMember -function Set-HAOption

Function Set-AzureHAMode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateSet("master", "slave", "single")]
        [string]$HAMode,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmAzureHAMode"
}
Export-ModuleMember -function Set-AzureHAMode

Function Get-AzureHAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmAzureHAConfiguration"
}
Export-ModuleMember -function Get-AzureHAOption

Function Set-AzureHAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$Partner,

        [ValidateNotNullOrEmpty()]
        [string]$Hcp,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(0, 1)]
        [int]$haprefered,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmAzureHAConfiguration"
}
Export-ModuleMember -function Set-AzureHAOption

Function Set-AwsHAMode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateSet("master", "slave", "single")]
        [string]$HAMode,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmAwsHAMode"
}
Export-ModuleMember -function Set-AwsHAMode

Function Get-AwsHAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmAwsHAConfiguration"
}
Export-ModuleMember -function Get-AwsHAOption

Function Set-AwsHAOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$Partner,

        [ValidateNotNullOrEmpty()]
        [string]$HealthCheckPort,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(0, 1)]
        [int]$haprefered,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmAwsHAConfiguration"
}
Export-ModuleMember -function Set-AwsHAOption
# ==================================================
# endregion CLUSTER
# ==================================================


# ==================================================
# region DIAGNOSTIC
# ==================================================
Function Get-DebugOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-LmDebugConfiguration"
}
Export-ModuleMember -function Get-DebugOption

Function Set-DebugOption
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [bool]$transparent,

        [bool]$irqbalance,

        [bool]$linearesplogs,

        [string]$netconsole,

        [Int16]$netconsoleinterface,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Set-LmDebugConfiguration"
}
Export-ModuleMember -function Set-DebugOption

Function DoTcpDump
{
    [cmdletbinding(SupportsShouldProcess=$true, DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [ValidateRange(1, 200000)]
        [int]$MaxPackets,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(1, 600)]
        [int]$MaxTime,

        [ValidateNotNullOrEmpty()]
        [string]$Interface,

        [ValidateNotNullOrEmpty()]
        [string]$Port,

        [ValidateNotNullOrEmpty()]
        [string]$Address,

        [ValidateNotNullOrEmpty()]
        [string]$TcpOptions,

        [string]$Path,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN,

        [switch]$Force
    )
    Write-Output "$warning Trace-TcpTraffic"
}
Export-ModuleMember -function DoTcpDump
# ==================================================
# endregion DIAGNOSTIC
# ==================================================


# ==================================================
# region N+M
# ==================================================
Function NMClusterStatus
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Get-ClusterStatus"
}
Export-ModuleMember -function NMClusterStatus

Function NMClusterCreate
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$SharedAddress,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-Cluster"
}
Export-ModuleMember -function NMClusterCreate

Function NMAddNode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$Address,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning New-ClusterNode"
}
Export-ModuleMember -function NMAddNode

Function NMJoinCluster
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Join-Cluster"
}
Export-ModuleMember -function NMJoinCluster

Function NMEnableNode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Int32]$NodeId,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Enable-ClusterNode"
}
Export-ModuleMember -function NMEnableNode

Function NMDisableNode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Int32]$NodeId,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Disable-ClusterNode"
}
Export-ModuleMember -function NMDisableNode

Function NMDeleteNode
{
    [cmdletbinding(DefaultParameterSetName='Credential')]
    Param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Int32]$NodeId,

        [ValidateNotNullOrEmpty()]
        [string]$LoadBalancer = $LoadBalancerAddress,

        [ValidateNotNullOrEmpty()]
        [ValidateRange(3, 65530)]
        [int]$LBPort = $LBAccessPort,

        [Parameter(ParameterSetName="Credential")]
            [ValidateNotNullOrEmpty()]
            [System.Management.Automation.Credential()]$Credential = $script:cred,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$CertificateStoreLocation = $script:CertificateStoreLocation,

        [Parameter(ParameterSetName="Certificate")]
            [ValidateNotNullOrEmpty()]
            [String]$SubjectCN = $script:SubjectCN
    )
    Write-Output "$warning Remove-ClusterNode"
}
Export-ModuleMember -function NMDeleteNode
# ==================================================
# endregion N+M
# ==================================================

# SIG # Begin signature block
# MIIcDQYJKoZIhvcNAQcCoIIb/jCCG/oCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDproCmbHORq7dN
# rCvi71htoutFNbUcZ1oxnmMNGCABJaCCCuMwggVWMIIEPqADAgECAhAZGjLLdZyX
# uM+sEY3VEn9JMA0GCSqGSIb3DQEBCwUAMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UE
# ChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
# cmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
# cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGlj
# IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNTAeFw0xNDAzMDQw
# MDAwMDBaFw0yNDAzMDMyMzU5NTlaMIGRMQswCQYDVQQGEwJVUzEdMBsGA1UEChMU
# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l
# dHdvcmsxQjBABgNVBAMTOVN5bWFudGVjIENsYXNzIDMgRXh0ZW5kZWQgVmFsaWRh
# dGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEP
# ADCCAQoCggEBANAYAu7too0IWGMPJtfdInuI9uTH7DsmGHjTx6QgU42DfKU/fqXI
# K0ffDfWm2cMdJZNgz3zc6gMsvnh/XEhtpwLZSfih6+uaYXyfwCbW3BXYuBB8ILpe
# 9Cj2qOqnXHzGnJCQNDy2Iqz+ugw6HtZehLZb8KOBcHiKjUZSe/zbSfMpExF0T40W
# s8LjoC3HAwSdzMNy4Q4M+wKO8SYXe26u+Lczi6ZhS0Xf8iVEx/ewmCM23Ch5Cuib
# coio2Oiue38KZEWl8FeSmncGRR7rn+hm83p9koFfAC0euPZWE1piDbdHoY9y74Ne
# guCUmOGspa2GN+Cn07qxPnrrRajxwUR94gMCAwEAAaOCAW0wggFpMBIGA1UdEwEB
# /wQIMAYBAf8CAQAwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL3Muc3ltY2IuY29t
# L3BjYTMtZzUuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMDMA4GA1UdDwEB/wQE
# AwIBBjAuBggrBgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNk
# LmNvbTBfBgNVHSAEWDBWMFQGBFUdIAAwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k
# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv
# bS9ycGEwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNjI5
# MB0GA1UdDgQWBBQWZt5KNONQpxGGA7FsqcaszVlumzAfBgNVHSMEGDAWgBR/02Wn
# wt3su/AwCfNDOfoCrzMxMzANBgkqhkiG9w0BAQsFAAOCAQEAP1sZ8/oT1XU4Klru
# n1qgTKkdxcyU7t4V/vUQbqQbpWSDVBhYxAsooYXDTnTl/4l8/tXtPLpxn1YCJo8W
# Koj+sKMnIs5L4jiOAKY6hl+d5T6o3mRJQXRBIf0HyIQX2h1lMILLJk851gQnpIGx
# S0nDI4t+AjIYJ7erC/MYcrak7mcGbzimWI3g8X5dpGDGqOVQX+DouuKPmVi2taCo
# dvGi8RyIQXJ+UpebCjaZjVD3Aes85/AiauU1jGM2ihqx2WdmX5ca76ggnfAvumzO
# 2ZSFAPFY8X3JfCK1B10CxuYLv6uTk/8nGI4zNn5XNPHDrwTBhPFWs+iHgzb40wox
# 3G4sbTCCBYUwggRtoAMCAQICECeDjyzMAJ09C7Adbyi1uUkwDQYJKoZIhvcNAQEL
# BQAwgZExCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlv
# bjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazFCMEAGA1UEAxM5U3lt
# YW50ZWMgQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBD
# QSAtIEcyMB4XDTE2MTAwNTAwMDAwMFoXDTE3MTAwNTIzNTk1OVowgdYxEzARBgsr
# BgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxHTAbBgNV
# BA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYDVQQFEwc1MDg0MDMyMQswCQYD
# VQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMR8w
# HQYDVQQKDBZLRU1QIFRlY2hub2xvZ2llcyBJbmMuMR8wHQYDVQQDDBZLRU1QIFRl
# Y2hub2xvZ2llcyBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
# zUcerldV4VKZ+xPtYfy3/HwbSLJu8HS2urs4QUEF41PJYl50P/+ePYKpuOcksc2l
# n45YO5/zrKTcjgzxMxJhrNDDAelPeZjiDlkidj6a79msxMXjRzIAI8A4b5SpKBKc
# 7GVANCt0HZlEWjYegiaVjA6fRJFTRuJVr+K1fc1M79mgARNPCLOuy21N7d+MNvOl
# nfBlvRGJZC2CQeeXHjhh/q8RdPmVqXliG8zkIIX+wq+kyVSO1ngYsDJZ4iMmjpCA
# QzdT564zK8potK4fjPblYDiiEtUR1wGg6g4l2X18Mci21of4RbWBKQ/hxQm6oprA
# XBraFsYnwwwt8QSl9+UtmQIDAQABo4IBkDCCAYwwLgYDVR0RBCcwJaAjBggrBgEF
# BQcIA6AXMBUME1VTLURFTEFXQVJFLTUwODQwMzIwCQYDVR0TBAIwADAOBgNVHQ8B
# Af8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3N3LnN5bWNiLmNvbS9z
# dy5jcmwwYAYDVR0gBFkwVzBVBgVngQwBAzBMMCMGCCsGAQUFBwIBFhdodHRwczov
# L2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2Iu
# Y29tL3JwYTAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBQWZt5K
# NONQpxGGA7FsqcaszVlumzAdBgNVHQ4EFgQUu/UpUEJhq9Dx+3CC/n6LPC3FyRYw
# WAYIKwYBBQUHAQEETDBKMB8GCCsGAQUFBzABhhNodHRwOi8vc3cuc3ltY2QuY29t
# MCcGCCsGAQUFBzAChhtodHRwOi8vc3cxLnN5bWNiLmNvbS9zdy5jcnQwDQYJKoZI
# hvcNAQELBQADggEBAF/gxzrK67CSW740OGSXAC4/NzRVcP5RmONNEXIjmYEowtgN
# UtXAns9olC+uzborP1Pq7MvZKMC0CW5P8GsloeqVGjRQ2IPFiEvLAagQO5HVzDMA
# NZeuTNS5At5i+MkqkW+sLoVH+tBVDhbn17sH2mX0wXid4NCOojyVA1FarE0gup+v
# XjhwBlXQPRU2K49cmd6dryN1GGufmiXJC25fggZ+2lc0A+j1mBfN9lsMVe7ZYgvW
# o1WyWM/K66ga8FC9MIpv2tzVQc5Oy0UysQtnHykfRuAA5yXHaiXejx2uF5/5LWR1
# s53Zchz0LXsZ+ndn4Utg0e2T9iRyuW7Sw7jek4sxghCAMIIQfAIBATCBpjCBkTEL
# MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD
# VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUIwQAYDVQQDEzlTeW1hbnRlYyBD
# bGFzcyAzIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5nIENBIC0gRzIC
# ECeDjyzMAJ09C7Adbyi1uUkwDQYJYIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEM
# MQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4w
# DAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgTWpulaW38EfEXNeVA1fN7aFp
# SKe1UWvCrZzj5nHvoBIwDQYJKoZIhvcNAQEBBQAEggEAa+FCIrOPR8sC+zW/IcXY
# 0xRkJTlKobcyIXBSH0UMIWNRVuBYwxeBRGxiqiz5KAQctQn4otz7K+aCkBo/Am2S
# cFuLkVKdhHQwpFWykuEtApgd1GG1jE1aCAZ2g2TTwzjnQDtg9Eah60MpzJe6xr4Q
# WyDqbclITMgq8vtVkvRSrmFF3i5FjZpQUL2P2uBD62X9aSrsmbo1GVHIGk6+hrwZ
# Px2hLlWJmrnKWa499kxH3Vroy9i6x5rSzSqjnDO+pPBrSCputzbFmW5e5CFVB1qh
# f9fFmA8SxRoq/peUU/ZuBn2y95U89ELMg7e48dc60T9BBShw4034J02IxkD6iliz
# aqGCDiwwgg4oBgorBgEEAYI3AwMBMYIOGDCCDhQGCSqGSIb3DQEHAqCCDgUwgg4B
# AgEDMQ0wCwYJYIZIAWUDBAIBMIH/BgsqhkiG9w0BCRABBKCB7wSB7DCB6QIBAQYL
# YIZIAYb4RQEHFwMwITAJBgUrDgMCGgUABBQxGASFalxI+VWDHJNvgB4WzOE3jQIV
# APgqvBCcWXGiLkinDGW+Q62VwJNrGA8yMDE3MDYwMjE3MTIyOVowAwIBHqCBhqSB
# gzCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u
# MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1h
# bnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcyoIIKizCCBTgwggQg
# oAMCAQICEHsFsdRJaFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNV
# BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
# Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIElu
# Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24g
# VW5pdmVyc2FsIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEy
# MDAwMDAwWhcNMzEwMTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU
# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l
# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew
# ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61Xz
# sAGtPHGsMo8Fa4aaJwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/
# Xm1AONSRBudBfHkcy8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q
# 0pi1Oh8eOZ3D9Jqo9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GI
# mRr1wOkzFNbfx4Dbke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1
# inisGTKPI8EyQRtZDqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3
# AgMBAAGjggF3MIIBczAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIB
# ADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBz
# Oi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1j
# Yi5jb20vcnBhMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Mu
# c3ltY2QuY29tMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91
# bml2ZXJzYWwtcm9vdC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEw
# H6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqj
# ToVy4Ke8QfMpojh/gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZ
# MA0GCSqGSIb3DQEBCwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociB
# iPenjxXmQCmt5l30otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7
# zJAv1gpsTjPs1rSTyEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzK
# EHhsQm7wtsX4YVxS9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gG
# V+HGDvbor9rsmxgfqrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA
# 4b+ZidvkORS92uTTw+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIB
# AgIQVFjyqtdB1kS8hKl7oJZS5jANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJV
# UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFu
# dGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1l
# U3RhbXBpbmcgQ0EwHhcNMTcwMTAyMDAwMDAwWhcNMjgwNDAxMjM1OTU5WjCBgDEL
# MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD
# VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBT
# SEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcyMIIBIjANBgkqhkiG9w0BAQEF
# AAOCAQ8AMIIBCgKCAQEAmfP82AQJA4b511ymk8BCfOp8Y89dAOKO88CQ348p9Rjq
# lLeS5dewoHOB6OkKm0p8Af+dj6Q5pw7qRfQiDDpw7TlFi+TFG1zwRWhGJAVjdpsc
# /J5sKrFW5Yp/UnGu8jXVRiMGHM9ILR20zbjZdiOOHP8+v7sGXGkHpmUO+F6ufS7t
# Ta4178nXAEL9KJUOn11yQgm8w9pE0u3MR4Tk/MotrFi+rveu2UQNCLfCd9YaQ3DR
# bgPeUpLEEAhx2boiVfIfvO2bnTviXh1Mg/+XD3sL51WDTtIN677X7K5uR7mf36XW
# UbwEVe3/J3BMye0qSxPhsblMD8kB7lVlX2kCeGbLPwIDAQABo4IBxzCCAcMwDAYD
# VR0TAQH/BAIwADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUH
# AgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBz
# Oi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1j
# cmwud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQM
# MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYI
# KwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEF
# BQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1j
# YS5jZXIwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTUw
# HQYDVR0OBBYEFAm1wf6WcpcpQ5rJ4AK6rvj9L7r2MB8GA1UdIwQYMBaAFK9j1sqj
# ToVy4Ke8QfMpojh/gHViMA0GCSqGSIb3DQEBCwUAA4IBAQAXswqI6VxaXiBrOwoV
# smzFqYoyh9Ox9BxTroW+P5v/17y3lIW0x1J+lOi97WGy1KeZ5MPJk8E1PQvoaApd
# Vpi9sSI70UR617/wbVEyitUj3zgBN/biUyt6KxGPt01sejMDG3xrCZQXu+TbWNQh
# E2Xn7NElyix1mpx//Mm7KmirxH20z6PJbKfZxACciQp3kfRNovsxO4Zu9uYfUAOG
# m7/LQqvmdptyWhEBisbvpW+V592uuuYiZfAYWRsRyc2At9iXRx9CCPiscR+wRlOz
# 1LLVo6tQdUgSF4Ktz+BBTzJ+zZUcv5GKCD2kp2cClt8kTKXQQcCCYKOKFzJL07zP
# pLSMMYICWjCCAlYCAQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFu
# dGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr
# MSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhBUWPKq
# 10HWRLyEqXugllLmMAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZI
# hvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTE3MDYwMjE3MTIyOVowLwYJKoZIhvcN
# AQkEMSIEIOw2a6U50/47tGXS4vTeEw645pE3ZGClFmSZdIAZBwjpMDcGCyqGSIb3
# DQEJEAIvMSgwJjAkMCIEIM96wXrQR+zV/cNoIgMbEtTvB4tvK0xea6Qfj/LPS61n
# MAsGCSqGSIb3DQEBAQSCAQB6HE9H+Hy0EB+bAyTu3NlzLqTMMpcpBSroC+ntHCDh
# uBTmbn8qPjSqQRRTFLXvHH5kuVzUseHX2LOhADDOze29Nh2H8ibzRnFap3aGOy6n
# nyb1vcumA7OT8GdXCJhEXo2uBBOvAA4qozxiv40tGb9VR1jtjO3WckhxOUg3KXnY
# CVx/4HD4+yutxhLQ/Z7L2Q4zDxVjArjoW0vFX1sr6eNfWEQ776x9zym/7hi3rzAG
# vvn5yqtAMBmv1yIssa+YAFHQCfRWTq7CZmpifXJQweH8AXkPycBSloUpqklpNPUA
# ydgpD7Wy2KWu8OrLCehNdotebYawEkpYo2AnyDM+l9D3
# SIG # End signature block