Private/Get-AtwsFunctionDefinition.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Function Get-AtwsFunctionDefinition
{
  [CmdLetBinding()]
  [OutputType([PSObject[]])]
  Param
  (
    [Parameter(Mandatory = $True)]
    [Autotask.EntityInfo]
    $Entity,
    
    [Parameter(Mandatory = $True)]
    [Autotask.Field[]]
    $FieldInfo,
    
    [String]
    $Prefix = 'Atws'
  )
   
  Begin
  {
    $FunctionDefinition = @{}
    
    $Verbs = @()
  }
  Process
  { 
    
    If ($Entity.CanCreate) 
    {
      $Verbs += 'New'
    }
    If ($Entity.CanDelete) 
    {
      $Verbs += 'Remove'
    }
    If ($Entity.CanQuery)  
    {
      $Verbs += 'Get'
    }
    If ($Entity.CanUpdate) 
    {
      $Verbs += 'Set'
    }

    # Add Default PSParameter info to Fields
    Foreach ($Field in $FieldInfo)
    {
      Add-Member -InputObject $Field -MemberType NoteProperty -Name 'ParameterSet' -Value 'By_parameters'
      Add-Member -InputObject $Field -MemberType NoteProperty -Name 'Mandatory' -Value $Field.IsRequired
    }

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

      Write-Verbose ('{0}: Creating Function {1}' -F $MyInvocation.MyCommand.Name, $FunctionName)
    
      $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 
        Parameters = Get-AtwsParameterDefinition -Entity $Entity -Verb $Verb -FieldInfo $FieldInfo
        Definition = (Get-Command ('{0}-AtwsDefinition' -F $Verb)).Definition -replace '#EntityName',$($Entity.Name) -replace '#Prefix',$Prefix
      }
    
      $FunctionDefinition[$FunctionName] = Convert-AtwsFunctionToText -AtwsFunction $AtwsFunction
   
    }
  }
  
  End 
  { 
    Return $FunctionDefinition
  }
}