Private/DynamicParameters/Get-JCCommonParameters.ps1
Function Get-JCCommonParameters { Param( [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The RuntimeDefinedParameterDictionary to store variables.')][ValidateNotNullOrEmpty()][System.Management.Automation.RuntimeDefinedParameterDictionary]$RuntimeParameterDictionary = (New-Object -TypeName:([System.Management.Automation.RuntimeDefinedParameterDictionary])) , [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The type of the object.')][ValidateNotNullOrEmpty()][ValidateSet('command', 'ldap_server', 'policy', 'application', 'radius_server', 'system_group', 'system', 'user_group', 'user', 'g_suite', 'office_365', 'organization')][Alias('TypeNameSingular')][System.String]$Type , [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The verb of the command calling it. Different verbs will make different parameters required.')][ValidateSet('add', 'get', 'new', 'remove', 'set')][System.String]$Action , [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = 'Bypass user prompts and dynamic ValidateSet.')][ValidateNotNullOrEmpty()][Switch]$Force ) Begin { } Process { # Get type list $script:JCType = If ($Type) { Get-JCType -Type:($Type) | Where-Object { $_.Category -eq 'JumpCloud' }; } Else { Get-JCType | Where-Object { $_.Category -eq 'JumpCloud' }; } # Define the new parameters $Param_Id = @{ 'Name' = 'Id'; 'Type' = [System.String[]]; 'Mandatory' = $true; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ById'); 'HelpMessage' = 'The unique id of the object.'; 'Alias' = $JCType.ById | Where-Object { $_ -ne 'Id' } | Select-Object -Unique; 'Position' = 1; } $Param_Name = @{ 'Name' = 'Name'; 'Type' = [System.String[]]; 'Mandatory' = $true; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ByName'); 'HelpMessage' = 'The name of the object.'; 'Alias' = $JCType.ByName | Where-Object { $_ -ne 'Name' } | Select-Object -Unique; 'Position' = 1; } $Param_SearchBy = @{ 'Name' = 'SearchBy'; 'Type' = [System.String]; 'Mandatory' = $true; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ByValue'); 'ValidateSet' = @('ById', 'ByName'); 'HelpMessage' = 'Specify how you want to search.'; 'DontShow' = $true; 'Position' = 1; } $Param_SearchByValue = @{ 'Name' = 'SearchByValue'; 'Type' = [System.String[]]; 'Mandatory' = $true; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ByValue'); 'HelpMessage' = 'Specify the item which you want to search for. Supports wildcard searches using: *'; 'DontShow' = $true; 'Position' = 2; } $Param_Fields = @{ 'Name' = 'Fields'; 'Type' = [System.Array]; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ById', 'ByName', '__AllParameterSets'); 'HelpMessage' = 'An array of the fields/properties/columns you want to return from the search.'; 'Position' = 95; } $Param_Filter = @{ 'Name' = 'Filter'; 'Type' = [System.String]; 'ValueFromPipelineByPropertyName' = $true; 'ValidateNotNullOrEmpty' = $true; 'ParameterSets' = @('ById', 'ByName', '__AllParameterSets'); 'HelpMessage' = 'Filters to narrow down search.'; 'ValidateScript' = { $FilterPattern = [regex]'.*?:.*?:.*?' If ($_ -notmatch $FilterPattern) { Throw ('Invalid filter "' + $_ + '". Filter must match pattern: {PropertyName}:{Operator}:{Value} (' + $FilterPattern + ')') } Else { $FilterParts = $_ -split ':' $FilterProperties = ((($JCType.ByName, $JCType.ById) + $JCType.SystemInsights.ByName + $JCType.SystemInsights.ById) | Select-Object -Unique) $FilterOperators = $JCType.FilterOperators + $JCType.SystemInsights.FilterOperators | Select-Object -Unique If ($FilterParts[0] -notin $FilterProperties) { Throw ('Invalid filter property provided "' + $FilterParts[0] + '". Accepted filter properties: "' + ($FilterProperties -join ', ') + '"') } If ($FilterParts[1] -notin $FilterOperators) { Throw ('Invalid filter operator provided "' + $FilterParts[1] + '". Accepted filter operators: "' + ($FilterOperators -join ', ') + '"') } $true } }; 'Position' = 96; } $Param_Limit = @{ 'Name' = 'Limit'; 'Type' = [System.Int32]; 'ValueFromPipelineByPropertyName' = $true; 'ValidateRange' = (1, [int]::MaxValue); 'DefaultValue' = $JCType.Limit | Select-Object -Unique; 'HelpMessage' = 'The number of items you want to return per API call.'; 'ParameterSets' = @('ById', 'ByName', '__AllParameterSets'); 'Position' = 97; } $Param_Skip = @{ 'Name' = 'Skip'; 'Type' = [System.Int32]; 'ValueFromPipelineByPropertyName' = $true; 'ValidateRange' = (0, [int]::MaxValue); 'DefaultValue' = $JCType.Skip | Select-Object -Unique; 'HelpMessage' = 'The number of items you want to skip over per API call.'; 'ParameterSets' = @('ById', 'ByName', '__AllParameterSets'); 'Position' = 98; } $Param_Paginate = @{ 'Name' = 'Paginate'; 'Type' = [System.Boolean]; 'ValueFromPipelineByPropertyName' = $true; 'DefaultValue' = $JCType.Paginate | Select-Object -Unique; 'HelpMessage' = 'Whether or not you want to paginate through the results.'; 'ParameterSets' = @('ById', 'ByName', '__AllParameterSets'); 'Position' = 99; } # # Add conditional parameter settings # If ($Type -and -not $Force) # { # # Determine if help files are being built # If ((Get-PSCallStack).Command -like '*MarkdownHelp') # { # $JCObjectCount = 999999 # } # Else # { # # Get count of JCObject to determine if script should load dynamic parameters # $JCObjectCount = (Get-JCObject -Type:($Type) -ReturnCount).totalCount # } # } # If ($Type -and -not $Force -and $JCObjectCount -le 300) # { # # Populate DefaultValue and ValidateSets # $JCObject = Get-JCObject -Type:($Type); # $Param_Id.Add('DefaultValue', $JCObject.($JCObject.ById | Select-Object -Unique)); # $Param_Name.Add('DefaultValue', $JCObject.($JCObject.ByName | Select-Object -Unique)); # $Param_Id.Add('ValidateSet', @($JCObject.($JCObject.ById | Select-Object -Unique))); # $Param_Name.Add('ValidateSet', @($JCObject.($JCObject.ByName | Select-Object -Unique))); # If ($JCObjectCount -eq 1) # { # # Allow Id and Name to use the default value # $Param_Id.Add('Mandatory', $false); # $Param_Name.Add('Mandatory', $false); # } # ElseIf ($JCObjectCount -ge 1) # { # # Don't allow Id and Name to use the default value # $Param_Id.Add('Mandatory', $true); # $Param_Name.Add('Mandatory', $true); # } # } # Else # { # $Param_Id.Add('Mandatory', $true); # $Param_Name.Add('Mandatory', $true); # } # Create another parameter set if an id or name is not required If ($Action -eq 'get') { $Param_Fields.ParameterSets += 'Default' $Param_Filter.ParameterSets += 'Default' $Param_Limit.ParameterSets += 'Default' $Param_Skip.ParameterSets += 'Default' $Param_Paginate.ParameterSets += 'Default' } # Build output $ParamVarPrefix = 'Param_' Get-Variable -Scope:('Local') | Where-Object { $_.Name -like '*' + $ParamVarPrefix + '*' } | Sort-Object { [int]$_.Value.Position } | ForEach-Object { # Add RuntimeDictionary to each parameter $_.Value.Add('RuntimeParameterDictionary', $RuntimeParameterDictionary) # Creating each parameter $VarName = $_.Name $VarValue = $_.Value Try { If ($Action -in ('add', 'new') -and $_.Name -in ('Param_Name')) # Can only add new objects by name { New-DynamicParameter @VarValue | Out-Null } ElseIf ($Action -in ('remove') -and $_.Name -in ('Param_Id')) # Can only remove objects by id { New-DynamicParameter @VarValue | Out-Null } ElseIf ($Action -in ('set') -and $_.Name -in ('Param_Id', 'Param_Name', 'Param_SearchBy', 'Param_SearchByValue' )) # Can set or update objects by id or name { New-DynamicParameter @VarValue | Out-Null } ElseIf ($Action -eq 'get' -and $_.Name -in ('Param_Id', 'Param_Name', 'Param_SearchBy', 'Param_SearchByValue', 'Param_Fields', 'Param_Filter', 'Param_Limit', 'Param_Skip', 'Param_Paginate')) { New-DynamicParameter @VarValue | Out-Null } } Catch { Write-Error -Message:('Unable to create dynamic parameter:"' + $VarName.Replace($ParamVarPrefix, '') + '"; Error:' + $Error) } } } End { Return $RuntimeParameterDictionary } } |