Private/Test-AtwsModuleConfiguration.ps1
<# .COPYRIGHT Copyright (c) Hugo Klemmestad. All rights reserved. Licensed under the MIT license. See https://github.com/ecitsolutions/Autotask/blob/master/LICENSE.md for license information. #> Function Test-AtwsModuleConfiguration { <# .SYNOPSIS This function validates the current module configuration and throws an exception if anything is wrong. .DESCRIPTION This function validates the current module configuration and throws an exception if any required properties are missing or of the wrong type. It uses builtin parameter validation with an internal function to leverage builtin powershell functionality. .INPUTS A custom PowerShell object .OUTPUTS Nothing. .EXAMPLE Test-AtwsModuleConfiguration -Configuration $ConfigurationObject .NOTES NAME: Test-AtwsModuleConfiguration #> [cmdletbinding( ConfirmImpact = 'Low', DefaultParameterSetName = 'Default' )] Param ( [Parameter( Mandatory = $true, ValueFromPipeline = $true )] [ValidateNotNullOrEmpty()] [pscustomobject] $Configuration ) Function Test-AtwsModuleConfigurationByPropertyname { <# .SYNOPSIS This function re-loads the module with the correct parameters for full functionality .DESCRIPTION This function is a wrapper that is included for backwards compatibility with previous module behavior. These parameters should be passed to Import-Module -Variable directly, but previously the module consisted of two, nested modules. Now there is a single module with all functionality. .INPUTS A PSCredential object. Required. A string used as ApiTrackingIdentifier. Required. .OUTPUTS Nothing. .EXAMPLE Connect-AtwsWebAPI -Credential $Credential -ApiTrackingIdentifier $string .NOTES NAME: Connect-AtwsWebAPI #> [cmdletbinding( ConfirmImpact = 'Low', DefaultParameterSetName = 'Default' )] Param ( [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateNotNullOrEmpty()] [string] $Username, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateNotNullOrEmpty()] [securestring] $SecurePassword, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateNotNullOrEmpty()] [securestring] $SecureTrackingIdentifier, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [switch] $ConvertPicklistIdToLabel, [Parameter( ValueFromPipelineByPropertyName = $true )] [ValidateScript( { # It can be empty, but if it isn't it should be max 8 characters and only letters and numbers if ($_.length -eq 0 -or ($_ -match '[a-zA-Z0-9]' -and $_.length -gt 0 -and $_.length -le 8)) { $true } else { $false } })] [string] $Prefix, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [switch] $RefreshCache, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateSet('Stop', 'Inquire', 'Continue', 'SilentlyContinue')] [string] $DebugPref, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateSet('Stop', 'Inquire', 'Continue', 'SilentlyContinue')] [string] $VerbosePref, [Parameter( ValueFromPipelineByPropertyName = $true )] [ValidateRange(0, 100)] [int] $ErrorLimit, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateSet('Disabled', 'Inline', 'LabelField')] [string] $PickListExpansion, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateSet('Disabled', 'Inline', 'Hashtable')] [string] $UdfExpansion, [Parameter( Mandatory = $true, ValueFromPipelineByPropertyName = $true )] [ValidateScript( { # Allow disabled and local before testing timezone conversion if ($_ -in 'Disabled', 'Local') { return $true } # Allow any valid TimeZone on current system try { $null = [System.Timezoneinfo]::FindSystemTimeZoneById($_) } catch { return $false } return $true })] [string] $DateConversion ) begin { # Enable modern -Debug behavior if ($PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent) { $DebugPreference = 'Continue' } Write-Debug ('{0}: Begin of function' -F $MyInvocation.MyCommand.Name) } process { Write-Verbose ('{0}: Configuration validated OK' -F $MyInvocation.MyCommand.Name) } end { Write-Debug ('{0}: End of function' -F $MyInvocation.MyCommand.Name) } } Try { $Configuration | Test-AtwsModuleConfigurationByPropertyname -ErrorAction Stop return $true } catch { # Any parameter validation error will land us here $reason = ("{0}: {1}" -f $_.CategoryInfo.Category, $_.CategoryInfo.Reason) $message = "{2}: {0}`r`n`r`nLine:{1}`r`n`r`nScript stacktrace:`r`n{3}" -f $_.Exception.Message, $_.InvocationInfo.Line, $reason, $_.ScriptStackTrace Write-Verbose $message return $false } } |