-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathGet-AzDoExtension.ps1
More file actions
94 lines (77 loc) · 3.58 KB
/
Copy pathGet-AzDoExtension.ps1
File metadata and controls
94 lines (77 loc) · 3.58 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
92
93
94
function Get-AzDoExtension {
<#
.SYNOPSIS
Retrieves installed Azure DevOps extensions for a given organization.
.DESCRIPTION
The Get-AzDoExtension function retrieves installed extensions from an Azure DevOps organization.
It supports filtering by extension name and extension ID. The function uses the Azure DevOps REST API
to fetch the extensions and returns detailed information about each extension.
.PARAMETER CollectionUri
The URI of the Azure DevOps organization collection. This parameter is mandatory and accepts a string.
.PARAMETER ExtensionName
The name(s) of the extension(s) to look for. This parameter accepts an array of strings and is optional.
.PARAMETER ExtensionId
The ID(s) of the extension(s) to look for. This parameter accepts an array of strings and is optional.
.EXAMPLE
PS> Get-AzDoExtension -CollectionUri "https://dev.azure.com/organization" -ExtensionName "extension1"
Retrieves the extension named "extension1" from the specified Azure DevOps organization.
.EXAMPLE
PS> Get-AzDoExtension -CollectionUri "https://dev.azure.com/organization" -ExtensionId "extension-id-123"
Retrieves the extension with the ID "extension-id-123" from the specified Azure DevOps organization.
.NOTES
This function uses the Azure DevOps REST API to fetch the installed extensions.
Ensure you have the necessary permissions to access the API.
.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(ValueFromPipelineByPropertyName, ValueFromPipeline)]
[string[]]
$ExtensionName,
# Id(s) of the extension(s) to look for
[Parameter(ValueFromPipelineByPropertyName, ValueFromPipeline)]
[string[]]
$ExtensionId
)
begin {
Write-Verbose "Starting function: Get-AzDoExtension"
}
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"
$params = @{
uri = "$extensionCollectionUri/_apis/extensionmanagement/installedextensions"
version = "7.1-preview.1"
method = "GET"
}
if ($PSCmdlet.ShouldProcess($CollectionUri, "Get Extension(s) in $CollectionUri")) {
$result = (Invoke-AzDoRestMethod @params).value | Where-Object { -not $ExtensionName -and -not $ExtensionId -or $_.extensionName -in $ExtensionName -or $_.extensionId -in $ExtensionId }
} else {
Write-Verbose "Calling Invoke-AzDoRestMethod with $($params| ConvertTo-Json -Depth 10)"
}
}
end {
if ($result) {
$result | ForEach-Object {
[PSCustomObject]@{
CollectionURI = $CollectionUri
ExtensionCollectionURI = $extensionCollectionUri
ExtensionId = $_.extensionId
ExtensionName = $_.extensionName
ExtensionPublisherId = $_.PublisherId
ExtensionPublisherName = $_.PublisherName
ExtensionVersion = $_.version
ExtensionBaseUri = $_.baseUri
ExtensionFallbackBaseUri = $_.fallbackBaseUri
}
}
}
}
}