Получите идентификатор участника службы подключения к службе Azure DevOps с помощью powershell

Я работаю над автоматизацией регистраций приложений Azure Active Directory и подключений к службам Azure Devops, и мне это не удалось.

Я хочу запросить подключения к службе Azure DevOps (конечные точки службы) по идентификатору участника-службы (или, по крайней мере, получить идентификатор). Это возможно при использовании Azure CLI:

az devops service-endpoint list --query "[?authorization.parameters.serviceprincipalid=='xxx']"

Но поскольку я запускаю это в учетной записи автоматизации Azure как модуль Runbook PowerShell, интерфейс командной строки Azure не поддерживается.

Затем я попробовал Azure DevOps REST API и вызвал его из PowerShell, но ответ не содержит идентификатора субъекта-службы, а только это:

authorization : @{parameters=; scheme=ServicePrincipal}

Есть ли у кого-нибудь идеи, как это решить?

ОБНОВЛЕНИЕ

Остальное API я вызываю так:

$uriAccount = $UriOrg + "_apis/serviceendpoint/endpoints?endpointNames={name}&api-version=6.1-preview.4"
$result = Invoke-RestMethod -Uri $uriAccount -Method get -Headers $AzureDevOpsAuthenicationHeader 

И $ result.value дает мне следующее:

authorization : @{parameters=; scheme=ServicePrincipal}

person Hush    schedule 30.12.2020    source источник
comment
Привет, пожалуйста, проверьте, может ли мой ответ вам помочь. Если нет, не могли бы вы отредактировать свой вопрос и указать, какой REST API вы используете, чтобы люди могли продолжить изучение вопроса.   -  person Jane Ma-MSFT    schedule 31.12.2020


Ответы (1)


Вы можете попробовать REST API Конечные точки - получить конечные точки службы по именам.

GET https://dev.azure.com/{organization}/{project}/_apis/serviceendpoint/endpoints?endpointNames={endpointNames}&api-version=6.0-preview.4

В этом REST API вы можете найти идентификатор и подробную информацию по имени подключения службы.

Вот пример использования REST API в PowerShell:

$token = "{pat}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url="https://dev.azure.com/{organization}/{project}/_apis/serviceendpoint/endpoints?endpointNames={endpointNames}&api-version=6.0-preview.4"
$head = @{ Authorization =" Basic $token" }
Invoke-RestMethod -Uri $url -Method GET -Headers $head

Обновление:

Причина этого вопроса в том, что вы выводите result неверным способом.

Для тел ответов JSON нет интуитивно понятного способа получения результатов без указания последнего уровня. Вот мой измененный код, обратите внимание, как я печатаю result:

$token = "{pat}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url="https://dev.azure.com/{organization}/{project}/_apis/serviceendpoint/endpoints?endpointNames={endpointNames}&api-version=6.0-preview.4"
$head = @{ Authorization =" Basic $token" }
$reslut = Invoke-RestMethod -Uri $url -Method GET -Headers $head
echo $result.value.authorization.parameters
person Jane Ma-MSFT    schedule 31.12.2020
comment
Спасибо за ответ :) Пост обновил. Ваше предложение дало мне такой же результат. - person Hush; 01.01.2021
comment
@Hush Ваши обновления полезны! У меня есть обновления, мой ответ ~ - person Jane Ma-MSFT; 04.01.2021
comment
Ты мой новый любимый человек! Спасибо! - person Hush; 04.01.2021