PowerShell调用Kusto DB REST API遇405 Method Not Allowed错误求助
解决Kusto REST API调用405 Method Not Allowed错误
问题修复步骤
1. 修正变量定义错误
你的代码中uri = "https://$ClusterUri/databases/$DatabaseName/query"缺少变量前缀$,导致$uri未被正确赋值,直接引发请求地址异常。修改为:
$uri = "https://$ClusterUri/databases/$DatabaseName/query"
2. 规范集群URI格式
确保$ClusterUri的值是不带https://前缀的集群域名,例如:
$ClusterUri = "mycluster.kusto.windows.net"
如果你的$ClusterUri已经包含https://,构造$uri时要去掉重复前缀,避免生成无效URL。
3. 清理请求体冗余字段
Kusto查询API仅需要csl字段指定KQL语句,同时传入csl和query会导致请求格式错误,修改请求体如下:
$requestBody = @{ csl = $kqlQuery } | ConvertTo-Json
4. 修正AccessToken资源URI
获取令牌时,建议使用Kusto全局资源标识符https://kusto.azure.com/,确保令牌权限匹配:
$accessToken = (Get-AzAccessToken -ResourceUrl "https://kusto.azure.com/").Token
完整修正代码
Install-Module -Name Az -Scope CurrentUser -Force Import-Module Az Connect-AzAccount $ClusterUri = "mycluster.kusto.windows.net" # 替换为你的集群域名(不带https://) $DatabaseName = "mydatabase" # 替换为你的数据库名称 $accessToken = (Get-AzAccessToken -ResourceUrl "https://kusto.azure.com/").Token $headers = @{ "Authorization" = "Bearer $accessToken" "Content-Type" = "application/json" } $kqlQuery = @" TableName // 可写完整KQL,比如:TableName | take 10 "@ $requestBody = @{ csl = $kqlQuery } | ConvertTo-Json $uri = "https://$ClusterUri/databases/$DatabaseName/query" try{ $queryResult = Invoke-RestMethod -Uri $uri -Method POST -Headers $headers -Body $requestBody "Success" $queryResult } catch { $errorMessage = $_.Exception.Message if ($_.Exception.Response) { $responseContent = $_.Exception.Response.GetResponseStream() $reader = New-Object System.IO.StreamReader($responseContent) $responseBody = $reader.ReadToEnd() Write-Host "Error Message: $errorMessage" Write-Host "Response Body: $responseBody" } else { Write-Host "Error Message: $errorMessage" } }
额外检查项
- 确认你的Azure账号拥有目标Kusto集群和数据库的查询权限(如
Viewer或Data Reader角色)。 - 检查集群状态是否正常,网络无防火墙/NSG限制。
内容的提问来源于stack exchange,提问作者Sravani
相关产品推荐
相关产品推荐

