Functions/Platforms/Copy-PASPlatform.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
Function Copy-PASPlatform {
    <#
.SYNOPSIS
Duplicates a platform

.DESCRIPTION
Duplicates target, dependent, group or rotational group platform to a new platform.

.PARAMETER TargetPlatform
Specify if ID relates to Target platform

.PARAMETER DependentPlatform
Specify if ID relates to Dependent platform

.PARAMETER GroupPlatform
Specify if ID relates to Group platform

.PARAMETER RotationalGroup
Specify if ID relates to Rotational Group platform

.PARAMETER ID
The unique ID number of the platofrm to duplicate

.PARAMETER name
The name for the duplicate platform

.PARAMETER description
A description for the duplicate platform

.EXAMPLE
Copy-PASPlatform -TargetPlatform -ID 9 -name SomeNewPlatform -description "Some Description"

Duplicates Target Platform with ID of 9 to SomeNewPlatform

.EXAMPLE
Copy-PASPlatform -DependentPlatform -ID 9 -name SomeNewPlatform -description "Some Description"

Duplicates Dependent Platform with ID of 9 to SomeNewPlatform

.EXAMPLE
Copy-PASPlatform -GroupPlatform -ID 39 -name SomeNewPlatform -description "Some Description"

Duplicates Group Platform with ID of 39 to SomeNewPlatform

.EXAMPLE
Copy-PASPlatform -RotationalGroup -ID 59 -name SomeNewPlatform -description "Some Description"

Duplicates Rotational Group Platform with ID of 59 to SomeNewPlatform

.NOTES
Minimum version 11.4

.LINK
https://pspas.pspete.dev/commands/Copy-PASPlatform
#>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "targets"
        )]
        [switch]$TargetPlatform,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "dependents"
        )]
        [switch]$DependentPlatform,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "groups"
        )]
        [switch]$GroupPlatform,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "rotationalGroups"
        )]
        [switch]$RotationalGroup,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [int]$ID,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$name,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$description
    )

    BEGIN {

        $MinimumVersion = [System.Version]"11.4"

    }#begin

    Process {

        Assert-VersionRequirement -ExternalVersion $Script:ExternalVersion -RequiredVersion $MinimumVersion

        #Create URL for request
        $URI = "$Script:BaseURI/API/Platforms/$($PSCmdLet.ParameterSetName)/$ID/duplicate"

        #Get request parameters
        $boundParameters = $PSBoundParameters | Get-PASParameter -ParametersToRemove ID, TargetPlatform,
        DependentPlatform, GroupPlatform, RotationalGroup

        $body = $boundParameters | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($ID, "Duplicate $($PSCmdLet.ParameterSetName) Platform")) {

            #send request
            $result = Invoke-PASRestMethod -Uri $URI -Method POST -Body $body -WebSession $Script:WebSession

            if ($result) {

                $result

            }

        }

    }

    End { }

}