powershell 从客户端(:)中检测到具有潜在危险的Request.Path值,-在使用Azure DevOps RestAPI时是否有人遇到过此问题?

qij5mzcb  于 2023-02-04  发布在  Shell
关注(0)|答案(1)|浏览(192)

我正在尝试创建将从Azure DevOps中删除存储库的Powershell脚本。我运行get请求,然后尝试将存储库ID传递给删除请求的URL,但每次执行此操作时,我都会收到错误“从客户端(:)检测到具有潜在危险的请求。路径值"。
如果我用repo id硬编码运行Rest调用,它会工作,但是当我尝试将repo id传递给url时,我会得到错误-有人知道任何可能的变通方法吗?
下面是这些命令的简要示例:

$APIUrl = "$baseUrl/$Org/$ProjectName/_apis/git/repositories/$RepoName?api-version=6.0"

$Repo = Invoke-RestMethod -Uri $APIUrl -Method Get -Credential $cred -Headers $header

$DeleteUrl = "$baseUrl/$Org/$ProjectName/_apis/git/repositories/$Repo.id?api-version=6.0"

Invoke-RestMethod -Uri $DeleteUrl -Method Delete -Credential $cred -Headers $Header
twh00eeo

twh00eeo1#

问题在于构造此URL字符串的方式:

$DeleteUrl = "$baseUrl/$Org/$ProjectName/_apis/git/repositories/$Repo.id?api-version=6.0"

在PowerShell中,只有简单的变量表达式(如$Repo)才会在双引号字符串中展开,.id将被忽略。
这样,像"/$Repo.id?api"这样的字符串文字就扩展为像/@{id=repoId; name=repoName; ...}.id?api-version=6.0这样的值--这就是AzDO前面的Web处理程序抱怨“潜在危险路径”的原因。
使用$(...)子表达式运算符将整个表达式嵌套在字符串文字中:

$DeleteUrl = "$baseUrl/$Org/$ProjectName/_apis/git/repositories/$($Repo.id)?api-version=6.0"

相关问题