使用PowerShell创建项目时返回未指定的内部错误

53次阅读
没有评论

问题描述

在使用以下代码创建项目时,总是返回一个未指定的错误。

$pacToken = ""
$organizationName = "BLECUST"
$adoHeader = @{"Accept"="application/json";Authorization=("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$pacToken))))}
$adoTaskUri = "https://dev.azure.com/BLECUST/_apis/projects?api-version=5.1"
$response = Invoke-RestMethod -Uri $adoTaskUri -ContentType "application/json-patch+json"  -headers $adoHeader -Method GET
$response.value | ft name, visibility, url
$body='{  "name": "FabrikamTravel18",  "description": "Frabrikam travel app for Windows Phone",  "capabilities": {    "versioncontrol": {      "sourceControlType": "Git"    },    "processTemplate": {      "templateTypeId": "6b724908-ef14-45cf-84f8-768b5384da45"    }  }}'
Invoke-RestMethod -Uri $adoTaskUri -ContentType "application/json-patch+json" -Body $body-headers $adoHeader -Method POST

用户在Postman中测试了请求体,项目可以成功创建。用户想知道自己哪里出错了,为什么无法通过PowerShell创建项目。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据用户提供的代码,你的脚本是正确的,只需要将最后一个Content-Type更新为application/json即可:

Invoke-RestMethod -Uri $adoTaskUri -ContentType "application/json" -Body $body -headers $adoHeader -Method POST

使用PATCH方法用于更新团队项目,而不是创建项目。你可以参考此链接了解更多关于更新团队项目的信息。

方案2

如果方案1仍然无法解决问题,你可以尝试使用其他方法来创建项目。以下是一个示例脚本,可以使用Invoke-WebRequest来发送HTTP请求:

$pacToken = ""
$organizationName = "BLECUST"
$adoTaskUri = "https://dev.azure.com/BLECUST/_apis/projects?api-version=5.1"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$pacToken)))

$headers = @{
    "Authorization" = "Basic $base64AuthInfo"
    "Content-Type" = "application/json"
}

$body = @{
    name = "FabrikamTravel18"
    description = "Frabrikam travel app for Windows Phone"
    capabilities = @{
        versioncontrol = @{
            sourceControlType = "Git"
        }
        processTemplate = @{
            templateTypeId = "6b724908-ef14-45cf-84f8-768b5384da45"
        }
    }
} | ConvertTo-Json

$response = Invoke-WebRequest -Uri $adoTaskUri -Method POST -Headers $headers -Body $body

在这个示例中,我们使用Invoke-WebRequest发送HTTP请求来创建项目。你需要将$pacToken$organizationName替换为你自己的值。然后,我们定义了请求的头部和请求体,并使用ConvertTo-Json将请求体转换为JSON格式。最后,我们使用Invoke-WebRequest发送POST请求来创建项目。

希望这些解决方案能帮助到你解决问题。如果还有其他问题,请随时提问。

正文完