Я не могу хоть убей понять, чего этот API не хочет от меня! Я сделал запрос, чтобы получить идентификатор расширения и идентификатор издателя из командной строки. Я подключаюсь с помощью своего tenantId, потому что PAT администратора недостаточно. Теперь он не может его найти?
function azLogin {
param ( [string]$organization, [string]$tenant)
az login --tenant $tenant
}
[string]$tenant = $args[0]
[string]$organization = $args[1]
[string]$extension = $args[2]
[string]$publisher = $args[3]
try {
azLogin $organization $tenant
$result = az devops extension search --search-query Timetracker | ConvertFrom-Json
$extensionId = $result.extensionId
$publisherId = $result.publisher.publisherId
Write-Host $publisherId
az devops extension install --extension-id $extensionId --publisher-id $publisherId
if ($result.PSObject.Properties.Name -notcontains 'extensionId' -or $result.PSObject.Properties.Name -notcontains 'publisherId') {
throw
}
}
catch {
Write-Error "##[ERROR] failed."
}
На этом этапе предполагается установить эту организацию, но я получаю:
The requested extension 'ecbf0d3e-ca03-4972-88ad-edcd1cb4a69c.83b3c590-5cd3-495b-b401-b8b4ed6da230' doesn't exist.
Как мне установить расширение в своей организации, используя только PowerShell и pat?
Да и команда даже не запускалась.


В сценарии PowerShell вы не указываете организацию Azure DevOps, в которой установлено расширение. вы можете попытаться указать организацию, чтобы узнать, можно ли решить проблему.
Чтобы указать организацию Azure DevOps, вы можете попробовать один из следующих методов:
Настройте организацию по умолчанию после команды «az login».
az login xxxx
az devops configure --defaults organization=https://dev.azure.com/xxxx
Если вы используете команду «az login», но не установили организацию по умолчанию, вам необходимо указать организацию при вызове команды «az devops extension install».
az devops extension install --extension-id xxxx --publisher-id xxxx --org https://dev.azure.com/xxxx
Войдите напрямую, используя «az devops login».
az devops login --org https://dev.azure.com/xxxx
Я все еще получаю ту же ошибку, но спасибо за совет.
Использование rest API Azure Devops Service может упростить задачу, если вы используете PAT, СПРАВКА ПО API
В примере ниже показано, как установить расширение Azure Devops SonarQube (вы можете выбрать любое расширение по вашему желанию), просто скопируйте и замените свое собственное userName, PAT, orgName.
function Get-AuthHeaders {
[CmdletBinding()]
param (
[Parameter()]
[string]$UserName,
[string]$PersonalAccessToken
)
$basicAuth = ("{0}:{1}" -f $UserName, $PersonalAccessToken)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization = ("Basic {0}" -f $basicAuth) }
return $headers
}
function Install-AdoExtension {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string]$OrganizationName,
[Parameter(Mandatory)]
[string]$PublisherName,
[Parameter(Mandatory)]
[string]$ExtensionName,
[Parameter(Mandatory)]
[string]$Version,
[Parameter(Mandatory)]
[hashtable]$Headers
)
$uri = "https://extmgmt.dev.azure.com/{0}/_apis/extensionmanagement/installedextensionsbyname/{1}/{2}/{3}?api-version=7.2-preview.1" -f $OrganizationName, $PublisherName, $ExtensionName, $Version
$response = Invoke-RestMethod -Uri $uri -Method 'Post' -ContentType 'application/json' -Headers $headers -Body $body
return $response
}
function List-AdoExtension {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[string]$OrganizationName,
[Parameter(Mandatory)]
[hashtable]$Headers
)
$uri = "https://extmgmt.dev.azure.com/{0}/_apis/extensionmanagement/installedextensions?api-version=7.2-preview.1" -f $OrganizationName
$response = Invoke-RestMethod -Uri $uri -Method 'Get' -Headers $headers
return $response
}
##
$userName = "wbaccesstoken20250228"
$personalAccessToken = "xxxxxxx"
$orgName = "yourOrgName"
$extensionName = 'SonarQube'
$publisherName = 'SonarSource'
$version = '5.19.2'
###
$headers = Get-AuthHeaders -UserName $userName -PersonalAccessToken $personalAccessToken
Install-AdoExtension -OrganizationName $orgName -PublisherName $publisherName -ExtensionName $extensionName -Version $version -Headers $headers
List-AdoExtension -OrganizationName $orgName -Headers $headers
результат моего примера:
Вы пробовали «az devops login » вместо « az login»?