Public/ContactGroups/Copy-StatusCakeHelperContactGroup.ps1
<# .Synopsis Copies the settings of a StatusCake ContactGroup .EXAMPLE Copy-StatusCakeHelperContactGroup -GroupName "Example" -NewGroupName "Example - Copy" .INPUTS Username - Username associated with the API key ApiKey - APIKey to access the StatusCake API GroupName - Name of the Contact Group to be copied ContactID - ID of the Contact Group to be copied NewGroupName - Name of the Contact Group copy .FUNCTIONALITY Creates a copy of a contact group #> function Copy-StatusCakeHelperContactGroup { [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,}$')] $ContactID, [Parameter(ParameterSetName='CopyByName',Mandatory=$true)] [ValidateNotNullOrEmpty()] $GroupName, [Parameter(ParameterSetName='CopyByName',Mandatory=$true)] [Parameter(ParameterSetName='CopyById',Mandatory=$true)] [ValidateNotNullOrEmpty()] $NewGroupName ) $statusCakeFunctionAuth = @{"Username"=$Username;"Apikey"=$ApiKey} if($GroupName) { #If copying by name check if resource with that name exists if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake Contact Groups")) { $exists = Get-StatusCakeHelperContactGroup @statusCakeFunctionAuth -GroupName $GroupName if(!$exists) { Write-Error "No Contact with Specified Name Exists [$GroupName]" Return $null } elseif($exists.GetType().Name -eq 'Object[]') { Write-Error "Multiple Contacts with the same name [$GroupName] [$($exists.InsertID)]" Return $null } } } elseif($ContactID) { #If copying by ID verify that a resource with the Id already exists if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake Contacts")) { $exists = Get-StatusCakeHelperContactGroup @statusCakeFunctionAuth -ContactID $ContactID if(!$exists) { Write-Error "No Contact with Specified ID Exists [$ContactID]" Return $null } } } $psParams = @{ GroupName = $NewGroupName } $ParameterList = (Get-Command -Name New-StatusCakeHelperContactGroup).Parameters $paramsToUse = $exists | Get-Member | Select-Object Name $paramsToUse = Compare-Object $paramsToUse.Name @($ParameterList.keys) -IncludeEqual -ExcludeDifferent $paramsToUse = $paramsToUse | Select-Object -ExpandProperty InputObject $paramsToUse += @("Emails","Mobiles") # Values from response is different from parameters foreach ($key in $paramsToUse) { $value = $exists.$key if($key -eq "Emails" -and $value) { $psParams.Add("Email",$value) } elseif($key -eq "Mobiles" -and $value) { $psParams.Add("Mobile",$value) } elseif($value -or $value -eq 0) { $psParams.Add($key,$value) } } if( $pscmdlet.ShouldProcess("StatusCake API", "Create StatusCake Contact Group")) { $result = New-StatusCakeHelperContactGroup @statusCakeFunctionAuth @psParams } Return $result } |