Private/Get-AtwsFunctionDefinition.ps1

Function Get-AtwsFunctionDefinition
{
  [CmdLetBinding()]
  [OutputType([PSObject[]])]
  Param
  (
    [Parameter(Mandatory = $True)]
    [Autotask.EntityInfo]
    $Entity,
    
    [Parameter(Mandatory = $True)]
    [Autotask.Field[]]
    $FieldInfo
  )
   
  Begin
  {
    $FunctionDefinition = @{}
    
    $Verbs = @()
  }
  Process
  { 
    
    If ($Entity.CanCreate) 
    {
      $Verbs += 'New'
    }
    If ($Entity.CanDelete) 
    {
      $Verbs += 'Remove'
    }
    If ($Entity.CanQuery)  
    {
      $Verbs += 'Get'
    }
    If ($Entity.CanUpdate) 
    {
      $Verbs += 'Set'
    }

    

    Foreach ($Verb in $Verbs)
    {
      $FunctionName = '{0}-Atws{1}' -F $Verb, $Entity.Name

      Write-Verbose ('{0}: Creating Function {1}' -F $MyInvocation.MyCommand.Name, $FunctionName)
    
      $ConfirmImpact = Switch ($Verb)
      {
        'New'    {'Medium'}
        'Remove' {'Low'}
        'Get'    {'None'}
        'Set'    {'Medium'}
      }
      
      $DefaultParameterSetName = Switch ($Verb)
      {
        'New'    {'By_parameters'}
        'Remove' {'Input_Object'}
        'Get'    {'Filter'}
        'Set'    {'InputObject'}
      }
     
      $AtwsFunction = New-Object -TypeName PSObject -Property @{
        FunctionName = $FunctionName
        Copyright = Get-Copyright
        HelpText = Get-AtwsHelpText -Entity $Entity -Verb $Verb -FieldInfo $FieldInfo -FunctionName $FunctionName
        DefaultParameterSetName = $DefaultParameterSetName 
        ConfirmImpact = $ConfirmImpact
        Parameters = Get-AtwsParameterDefinition -Entity $Entity -Verb $Verb -FieldInfo $FieldInfo
        Definition = (Get-Command ('{0}-AtwsDefinition' -F $Verb)).Definition -replace '#EntityName',$($Entity.Name)
      }
    
      $FunctionDefinition[$FunctionName] = Convert-AtwsFunctionToText -AtwsFunction $AtwsFunction
   
    }
  }
  
  End 
  { 
    Return $FunctionDefinition
  }
}