PowerShell传递日期参数至Azure REST API URI失败求助
我来帮你排查这个问题!你遇到的报错大概率是因为两个关键问题:一是URI里的参数分隔符用了HTML转义的&而非正确的&,导致API无法解析日期参数;二是未明确指定UTC时间格式,可能引发日期解析歧义。
问题根源拆解
- 参数分隔符错误:你在URI中写的
&是HTML环境下的转义字符,PowerShell构建请求时会直接将其作为字符串内容发送给API,最终导致startTime的参数值变成了类似2024-05-19&endTime=2024-05-20的无效内容,API解析失败后就抛出了“值小于2014-05-01”的错误。 - 日期格式歧义:Azure消费API期望接收UTC标准格式的时间,直接使用本地日期字符串可能会因时区差异,导致API解析出的时间范围不符合你的预期。
修正后的完整代码
# 获取UTC标准的当前时间,避免时区偏差 $endDate = (Get-Date).ToUniversalTime() $startDate = $endDate.AddDays(-1) # 转换成API要求的ISO 8601格式(带时间节点和UTC后缀) $startTime = $startDate.ToString('yyyy-MM-ddT00:00:00Z') $endTime = $endDate.ToString('yyyy-MM-ddT23:59:59Z') # 构建请求头 $header = @{"authorization"="bearer $key"} # 使用正确的&作为参数分隔符,替换原有的& $uri = "https://consumption.azure.com/v3/enrollments/$enrollment/usagedetailsbycustomdate?startTime=$startTime&endTime=$endTime" # 发起请求(-UseBasicParsing可避免依赖IE组件) $usageDetails = Invoke-RestMethod -Uri $uri -Headers $header -Method Get -UseBasicParsing # 输出格式化后的JSON结果 $usageDetails | ConvertTo-Json -Depth 10
额外注意事项
- 确保
$enrollment和$key变量已正确赋值,否则会触发权限或路径类错误。 - Azure消费API要求时间范围不能超过31天,你取最近两天的逻辑完全符合规则。
- 强制使用UTC时间可以彻底避免不同时区下的日期解析偏差,确保API接收的时间范围与你的预期一致。
内容的提问来源于stack exchange,提问作者Guhan Palanisamy
相关产品推荐
相关产品推荐

