Public/SSL/Copy-StatusCakeHelperSSLTest.ps1
<# .Synopsis Copies the settings of a StatusCake SSL Test .EXAMPLE Copy-StatusCakeHelperSSLTest -Name "Example" -NewName "Example - Copy" .INPUTS Username - Username associated with the API key ApiKey - APIKey to access the StatusCake API Name - Name of the SSL Test to be copied ID - ID of the SSL Test to be copied NewDomain - Name of the new SSL Test domain Checkrate - Checkrate in seconds. Default is one day. .FUNCTIONALITY Creates a copy of a SSL Test. The check rate is not returned when retrieving a test and a copy defaults to check the SSL test once a day. #> function Copy-StatusCakeHelperSSLTest { [CmdletBinding(PositionalBinding=$false,SupportsShouldProcess=$true)] Param( [Parameter(ParameterSetName='CopyByName')] [Parameter(ParameterSetName='CopyById')] [ValidateNotNullOrEmpty()] $Username = (Get-StatusCakeHelperAPIAuth).Username, [Parameter(ParameterSetName='CopyByName')] [Parameter(ParameterSetName='CopyById')] [ValidateNotNullOrEmpty()] $ApiKey = (Get-StatusCakeHelperAPIAuth).GetNetworkCredential().password, [Parameter(ParameterSetName='CopyById',Mandatory=$true)] [ValidatePattern('^\d{1,}$')] $id, [Parameter(ParameterSetName='CopyByName',Mandatory=$true)] [ValidatePattern('^((http|https):\/\/)?([a-zA-Z0-9\-]+(\.[a-zA-Z]+)+.*)$|^(?!^.*,$)((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))*$')] $Domain, [Parameter(ParameterSetName='CopyByName',Mandatory=$true)] [Parameter(ParameterSetName='CopyById',Mandatory=$true)] [ValidatePattern('^((http|https):\/\/)?([a-zA-Z0-9\-]+(\.[a-zA-Z]+)+.*)$|^(?!^.*,$)((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))*$')] $NewDomain, [Parameter(ParameterSetName='CopyByName')] [Parameter(ParameterSetName='CopyById')] [ValidateSet("300","600","1800","3600","86400","2073600")] $checkrate="86400" ) $statusCakeFunctionAuth = @{"Username"=$Username;"Apikey"=$ApiKey} if($Name) { #If copying by name check if resource with that name exists if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake SSL Tests")) { $exists = Get-StatusCakeHelperSSLTest @statusCakeFunctionAuth -Name $Name if(!$exists) { Write-Error "No SSL Test with Specified Name Exists [$Name]" Return $null } elseif($exists.GetType().Name -eq 'Object[]') { Write-Error "Multiple SSL Tests with the same name [$Name] [$($exists.ID)]" Return $null } } } elseif($ID) { #If copying by ID verify that a resource with the Id already exists if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake SSL Tests")) { $exists = Get-StatusCakeHelperSSLTest @statusCakeFunctionAuth -id $ID if(!$exists) { Write-Error "No SSL Test with Specified ID Exists [$ID]" Return $null } } } $psParams = @{} $ParameterList = (Get-Command -Name New-StatusCakeHelperSSLTest).Parameters $paramsToUse = $exists | Get-Member | Select-Object Name $paramsToUse = Compare-Object $paramsToUse.Name @($ParameterList.keys) -IncludeEqual -ExcludeDifferent $paramsToUse = $paramsToUse | Select-Object -ExpandProperty InputObject foreach ($key in $paramsToUse) { $value = $exists.$key if($value -or $value -eq 0) { $psParams.Add($key,$value) } } # Check rate is not returned when retrieving SSL tests $psParams.Add("checkrate",$checkrate) # Convert the string back to array expected by cmdlet $psParams.alert_at = @($psParams.alert_at -split ",") $psParams.Domain = $NewDomain if( $pscmdlet.ShouldProcess("StatusCake API", "Create StatusCake SSL Test")) { $result = New-StatusCakeHelperSSLTest @statusCakeFunctionAuth @psParams } Return $result } |