В сообщении пару дней назад мне предложили использовать classificationnodes
для получения/опубликации в Iterations. Я тестировал эти конечные точки, и если я использую следующий URL-адрес в Postman, он работает отлично.
https://dev.azure.com/<org name>/<project name>/_apis/wit/classificationnodes/Iterations?$depth=2&api-version=6.0
Но если я использую тот же URL-адрес в Powershell, я получаю ноль.
$sourceBase64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $UserName, $SourceToken)))
$Header = @{
Authorization = ("Basic {0}" -f $SourceBase64AuthInfo)
Content='application/json'
}
$SourceURL = 'https://dev.azure.com/{0}/{1}/_apis/wit/classificationnodes/Iterations?$depth=2&api-version=6.0' -f $SourceOrg, $SourceProject
Try {
$SourceIterations = (Invoke-RestMethod $SourceURL -Headers $Header).value
}
Catch {
if ($_ -match "Access Denied") {
Throw "Access has been denied, please check your token"
}
else {
Throw $_
}
}
Я могу убрать /Iterations
и получить и области, и итерации. Почему это работает в Postman, а не в Powershell?
Дополнительный вопрос: если я не могу использовать /Iterations
, как мне отфильтровать результат GET
только по итерациям (или областям)?
ОБНОВЛЯТЬ:
Мне предложили просмотреть заголовки, чтобы узнать, было ли добавлено что-то дополнительное в Postman. Я не вижу ничего, что бросалось бы в глаза.
@jdweng Я добавил обновление к своему вопросу
Добавьте авторизацию, пользовательский агент и кодировку принятия в ваш запрос ps. Это опции в вашем Invok-RestMethod: Learn.microsoft.com/en-us/powershell/module/…
Аутентификация была там, я забыл включить ее в вопрос. Я обновлю это.
Powershell не добавляет автоматически заголовки, такие как Postman. Вы можете получить ошибку типа 400, если не включите User Agent и Accept-Encoding.
Проблема в конечном итоге заключалась в вызове свойства .value
здесь:
Try {
$SourceIterations = (Invoke-RestMethod $SourceURL -Headers $Header).value
}
Как только я удалил это, я получил объект обратно с дочерними итерациями, чего я и хотел.
Это риск копирования/вставки кода... :-)
Проверьте панель управления Postman, где есть весь запрос со всеми заголовками http. Postman автоматически добавит заголовки, а powershell — нет. Добавьте недостающие заголовки http в ваш скрипт PS, и код должен работать.