Functions/Remove-JfrogArtifact.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
<#PSScriptInfo
 
.VERSION 1.0.0
 
.GUID
 
.AUTHOR Artsiom Krot
 
.PROJECTURI https://github.com/artyom-krot/PS.JfrogArtifactory
 
.RELEASENOTES
 
 
Script file name:
 
    Remove-JfrogArtifact.ps1
 
.DESCRIPTION
 
    The script is an integral part of PS.JfrogArtifactory solution (https://github.com/artyom-krot/PS.JfrogArtifactory)
 
    Jfrog reference documentation:
    https://www.jfrog.com/confluence/display/JFROG/Artifactory+REST+API#ArtifactoryRESTAPI-ArtifactsNotDownloadedSince
 
#>


function Remove-JfrogArtifact {
    <#
    .SYNOPSIS
        PowerShell script for deleting jfrog artifactory artifacts with the help of rest api.
         
        Jfrog reference documentation about used restapi method:
        https://www.jfrog.com/confluence/display/JFROG/Artifactory+REST+API#ArtifactoryRESTAPI-ArtifactsNotDownloadedSince
 
    .DESCRIPTION
         
         
    .INPUTS
        -ArtifactFullPath <string[]> /repo-name/artifact-folder/artifact-name
 
        -Force <switch>
         
 
    .OUTPUTS
        Information message in case of success or error message in case of failure.
 
    .NOTES
         
     
    .EXAMPLE
        Remove-JfrogArtifact -ArtifactFullPath /docker-prod/my-image-name/image-tag -Force
 
    #>

    
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact='High')]
    param(
        [parameter(Position = 0, Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $ArtifactFullPath,

        [parameter(Position = 1, Mandatory = $false)]
        [switch]
        $Force
    )
    
    begin {
        if (-not $PSBoundParameters.ContainsKey('Verbose')) {
            $VerbosePreference = $PSCmdlet.SessionState.PSVariable.GetValue('VerbosePreference')
        }
        if (-not $PSBoundParameters.ContainsKey('Confirm')) {
            $ConfirmPreference = $PSCmdlet.SessionState.PSVariable.GetValue('ConfirmPreference')
        }
        if (-not $PSBoundParameters.ContainsKey('WhatIf')) {
            $WhatIfPreference = $PSCmdlet.SessionState.PSVariable.GetValue('WhatIfPreference')
        }
        Write-Verbose ('[{0}] Confirm={1} ConfirmPreference={2} WhatIf={3} WhatIfPreference={4}' -f $MyInvocation.MyCommand, $Confirm, $ConfirmPreference, $WhatIf, $WhatIfPreference)
    }

    process {
        try {   
            if ($Force -or $PSCmdlet.ShouldProcess("Confirm removal of the artifact '/$ArtifactFullPath'?")) {
                
                Invoke-ArtifactoryRestApi -RestApiPath "/$ArtifactFullPath" -Method Delete
                $responseMessage = "Remove artifact /$ArtifactFullPath. Success!"
            }
        } 
        catch [System.Net.WebException] {
            $response = $_.Exception.Response
            $responseMessage =  'Failed to remove {0} due to status code {1} ({2}).' -f $response.ResponseUri, [int]($response.StatusCode), $response.StatusDescription
            Write-Error ($responseMessage)
        }
        return $responseMessage
    }

}