Public/Add-SecurityDomain.ps1

function Add-SecurityDomain {
  <#
    .SYNOPSIS
    Add security domain
 
    .DESCRIPTION
    Add a new security domain to a JBoss instance
 
    .PARAMETER Path
    The path parameter corresponds to the path to the JBoss client.
 
    .PARAMETER Controller
    The controller parameter corresponds to the hostname and port of the JBoss host.
 
    .PARAMETER Credentials
    The optional credentials parameter correspond to the credentials of the account to use to connect to JBoss.
 
    .PARAMETER SecurityDomain
    The security domain parameter corresponds to the name of the security domain to create.
 
    .PARAMETER Cache
    The optional cache parameter corresponds to the type of cache to configure. The default is "default".
 
    .INPUTS
    None. You can pipe the name of the security domain to Add-SecurityDomain.
 
    .OUTPUTS
    System.String. Add-SecurityDomain returns the raw output from the JBoss client.
 
    .NOTES
    File name: Add-SecurityDomain.ps1
    Author: Florian Carrier
    Creation date: 20/01/2020
    Last modified: 20/01/2020
 
    .LINK
    Add-Resource
 
    .LINK
    Test-SecurityDomain
 
    .LINK
    Read-SecurityDomain
 
    .LINK
    Remove-SecurityDomain
  #>

  [CmdletBinding (
    SupportsShouldProcess = $true
  )]
  Param (
    [Parameter (
      Position    = 1,
      Mandatory   = $true,
      HelpMessage = "Path to the JBoss client"
    )]
    [ValidateNotNUllOrEmpty ()]
    [String]
    $Path,
    [Parameter (
      Position    = 2,
      Mandatory   = $true,
      HelpMessage = "Controller"
    )]
    # TODO validate format
    [ValidateNotNUllOrEmpty ()]
    [String]
    $Controller,
    [Parameter (
      Position    = 3,
      Mandatory   = $false,
      HelpMessage = "User credentials"
    )]
    [ValidateNotNUllOrEmpty ()]
    [System.Management.Automation.PSCredential]
    $Credentials,
    [Parameter (
      Position    = 4,
      Mandatory   = $true,
      HelpMessage = "Name of the security domain to be created",
      ValueFromPipeline               = $true,
      ValueFromPipelineByPropertyName = $true
    )]
    [ValidateNotNUllOrEmpty ()]
    [String]
    $SecurityDomain,
    [Parameter (
      Position    = 5,
      Mandatory   = $false,
      HelpMessage = "Type of the cache"
    )]
    [ValidateNotNUllOrEmpty ()]
    [String]
    $ChacheType = "default"
  )
  Begin {
    # Get global preference variables
    Get-CallerPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState
  }
  Process {
    # Define attributes
    $Resource   = "/subsystem=security/security-domain=$SecurityDomain"
    $Parameters = "cache-type=\""$ChacheType\"""
    # Add resource
    if ($PSBoundParameters.ContainsKey("Credentials")) {
      Add-Resource -Path $Path -Controller $Controller -Resource $Resource -Parameters $Parameters -Credentials $Credentials
    } else {
      Add-Resource -Path $Path -Controller $Controller -Resource $Resource -Parameters $Parameters
    }
  }
}