使用powershell将Azure测试计划克隆到新的区域路径

使用powershell将Azure测试计划克隆到新的区域路径,azure,powershell,Azure,Powershell,我有一个powershell脚本可以克隆我的测试计划-我正在使用Azure 2019,因此该功能不是内置的。我的脚本可以工作,但只有克隆计划到相同的区域路径。我希望能够克隆到一个新的区域路径。例如,在下图的“测试计划”下,我想将MyTests\Version1.7中的“TestPlan1.7”克隆到MyTests\Version1.8中的“NewTestPlan”。我当前使用的代码会在克隆时创建新的测试计划,但也可以选择手动创建新的测试计划。此外,我无法将任何插件或mod下载/安装到azure,

我有一个powershell脚本可以克隆我的测试计划-我正在使用Azure 2019,因此该功能不是内置的。我的脚本可以工作,但只有克隆计划到相同的区域路径。我希望能够克隆到一个新的区域路径。例如,在下图的“测试计划”下,我想将MyTests\Version1.7中的“TestPlan1.7”克隆到MyTests\Version1.8中的“NewTestPlan”。我当前使用的代码会在克隆时创建新的测试计划,但也可以选择手动创建新的测试计划。此外,我无法将任何插件或mod下载/安装到azure,因此这些都不是我的解决方案。谢谢你的帮助! 这是我要克隆的当前代码段。我的脚本中列出了变量,但我不认为这需要它们

编辑:我尝试了你的答案Sunny(并且刚刚意识到我可以编辑我自己的问题来添加内容),这是我的全部代码,以及错误。由于明显的原因改变了变量,但结构是相同的。错误给出的行号是以“Invoke WebRequest”开头的行号

$organization = "myOrg"    
$PAT = "MyAzurePAT"
$myBaseUrl = "myAzureUrl"
$project = "myTests"   
$planId = "123456"   
$suiteId = "123457"   
$cloneTo = "NewtestPlan"

$authorization = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$PAT"))
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept-Charset", 'UTF-8')
$headers.Add('Content-Type','Application/Json')
$headers.Add('Authorization',"Basic $authorization")

$postParams=@"
{
  "destinationTestPlan": {
    "name": "$cloneTo",
    "Project": {
      "Name": "$project"
    }
  },
  "options": {
    "copyAncestorHierarchy": true,
    "copyAllSuites": true,
    "overrideParameters": {
    "System.AreaPath": "myTests\Version1.8",
    "System.IterationPath": "NewtestPlan"
    }
  },
  "suiteIds": [  
    $suiteId
  ]
}
"@

$apiUrl = "$myBaseUrl/$organization/$project/_apis/test/Plans/$planId/cloneoperation?api-version=5.0-preview.2"
Invoke-WebRequest -Uri $apiUrl -Method POST -Headers $headers -Body $postParams |  Select-Object -Expand StatusDescription

<#Error
Invoke-WebRequest : {"$id":"1","innerException":null,"message":"Value cannot be 
null.\r\nParameter name: cloneRequestBody","typeName":"System.ArgumentNullException, 
mscorlib","typeKey":"ArgumentNullException","errorCode":0,"eventId":0}
At [locationRemoved]\testPlanCloneTool.ps1:39 char:1
+ Invoke-WebRequest -Uri $apiUrl -Method POST -Headers $headers -Body $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
#>
$organization=“myOrg”
$PAT=“MyAzurePAT”
$myBaseUrl=“myAzureUrl”
$project=“myTests”
$planId=“123456”
$suiteId=“123457”
$cloneTo=“新测试计划”
$authorization=[Convert]::tobase64字符串([System.Text.Encoding]::UTF8.GetBytes(“:$PAT”))
$headers=newobject“System.Collections.Generic.Dictionary[[String],[String]]”
$headers.Add(“接受字符集”,“UTF-8”)
$headers.Add('Content-Type','Application/Json')
$headers.Add('授权',“基本$Authorization”)
$postParams=@”
{
“目标测试计划”:{
“名称”:“$cloneTo”,
“项目”:{
“名称”:“$project”
}
},
“选择”:{
“CopyCanceStorHierarchy”:正确,
“copyAllSuites”:没错,
“覆盖参数”:{
“System.AreaPath”:“myTests\Version1.8”,
“System.IterationPath”:“NewtestPlan”
}
},
“SuiteID”:[
$suiteId
]
}
"@
$apiUrl=“$myBaseUrl/$organization/$project/\u api/test/plannis/$planId/cloneoperation?api版本=5.0-preview.2”
调用WebRequest-Uri$apirl-Method POST-Headers$Headers-Body$postParams |选择对象-展开StatusDescription

您是否尝试过“选项”下的“覆盖参数”

MS Docs Ref:

我确实这样做了,但出现了一个很长的错误(太长,无法在评论中发布,但我会将其中的一部分放在这里),希望您能提供任何帮助,因为我对powershell Invoke WebRequest仍然比较陌生:{“$id”:“1”,“innerException”:null,“message”:“值不能为null。\r\n参数名称:cloneRequestBody”,“typeName”:“System.ArgumentNullException,mscorlib”,“typeKey”:“ArgumentNullException”,“errorCode”:0,“eventId”:0}位于[locationRemoved]\testPlanCloneTool.ps1:39 char:1+Invoke WebRequest-Uri$APIRL-方法POST-Headers$Headers-正文$…+类别信息:InvalidOperation:
$postParams=@"
{
  "destinationTestPlan": {
    "name": "$cloneTo",
    "Project": {
      "Name": "$project"
    }
  },
  "options": {
    "copyAncestorHierarchy": true,
    "copyAllSuites": true,
    "overrideParameters": {
     "System.AreaPath": "MyTests\Version1.8",
      "System.IterationPath": "NewTestPlan"
    }
  },
  "suiteIds": [  
    $sourceSuiteId,
   ]
}
"@