-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathNew-AzDoExtension.ps1
More file actions
91 lines (72 loc) · 3.2 KB
/
Copy pathNew-AzDoExtension.ps1
File metadata and controls
91 lines (72 loc) · 3.2 KB
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
function New-AzDoExtension {
<#
.SYNOPSIS
Installs an Azure DevOps extension in the specified organization.
.DESCRIPTION
The New-AzDoExtension cmdlet installs an Azure DevOps extension in the specified organization.
It uses the Azure DevOps REST API to perform the installation.
.PARAMETER CollectionUri
The URI of the Azure DevOps organization.
.PARAMETER ExtensionId
The ID of the extension to install.
.PARAMETER ExtensionPublisherId
The publisher ID of the extension to install.
.PARAMETER ExtensionVersion
The version of the extension to install. If not specified, the latest version will be installed.
.EXAMPLE
PS> New-AzDoExtension -CollectionUri "https://dev.azure.com/yourorganization" -ExtensionId "extensionId" -ExtensionPublisherId "publisherId"
This command installs the specified extension in the given Azure DevOps organization.
.EXAMPLE
PS> New-AzDoExtension -CollectionUri "https://dev.azure.com/yourorganization" -ExtensionId "extensionId" -ExtensionPublisherId "publisherId" -ExtensionVersion "1.0.0"
This command installs version 1.0.0 of the specified extension in the given Azure DevOps organization.
.NOTES
This cmdlet requires the Azure DevOps REST API and appropriate permissions to install extensions.
.LINK
https://learn.microsoft.com/en-us/rest/api/azure/devops/extensionmanagement/installed-extensions/get?view=azure-devops-rest-7.1&tabs=HTTP
#>
[CmdletBinding(SupportsShouldProcess)]
param (
# Collection Uri of the organization
[Parameter(Mandatory, ValueFromPipelineByPropertyName)]
[ValidateScript({ Validate-CollectionUri -CollectionUri $_ })]
[string]
$CollectionUri,
# Name(s) of the extension(s) to look for
[Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)]
[string]
$ExtensionId,
# Id(s) of the extension(s) to look for
[Parameter(Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline)]
[string]
$ExtensionPublisherId,
# Version of the extension to install
[Parameter(ValueFromPipelineByPropertyName, ValueFromPipeline)]
[string]
$ExtensionVersion
)
begin {
Write-Verbose "Starting function: New-AzDoExtensions"
}
process {
# For extensions a different base URI is used: https://learn.microsoft.com/en-us/rest/api/azure/devops/extensionmanagement/installed-extensions/get?view=azure-devops-rest-7.1&tabs=HTTP
$extensionCollectionUri = $CollectionUri -replace "//dev", "//extmgmt.dev"
if ($ExtensionVersion) {
$uri = "$extensionCollectionUri/_apis/extensionmanagement/installedextensionsbyname/$ExtensionPublisherId/$ExtensionId/$ExtensionVersion"
} else {
$uri = "$extensionCollectionUri/_apis/extensionmanagement/installedextensionsbyname/$ExtensionPublisherId/$ExtensionId"
}
$params = @{
uri = $uri
version = "7.1-preview.1"
method = "POST"
}
if ($PSCmdlet.ShouldProcess($CollectionUri, "Install Extension $ExtensionName in $CollectionUri")) {
$result = (Invoke-AzDoRestMethod @params).value
} else {
Write-Verbose "Calling Invoke-AzDoRestMethod with $($params| ConvertTo-Json -Depth 10)"
}
}
end {
$result
}
}