使用REST API中的ODATA筛选Azure备份作业

时间:2018-08-09 18:24:47

标签: rest azure odata odata-v4

我正在尝试使用Azure REST API接收过去24小时内的Recovery Services备份作业。该API默认显示为与当前UTC日期匹配的作业。

据我所知,Azure正在使用ODATA v4,因此我希望查询$filter=startTime gt (now() sub duration P1D)可以正常工作。但是,当我执行脚本时,它似乎会忽略过滤器并执行其默认值(仅适用于当前UTC日期)。

documentation for the API method的示例使用了显式日期,这些日期似乎被格式化为Edm.DateTime,即使startTime属性似乎以Edm.DateTimeOffset格式返回。但是我没有在$ filter查询中找到任何用于计算日期的文档。

下面是我的脚本的副本。有人能针对Azure REST API进行类似的事情吗?

$ListRSVaultsParams = @{
    Uri     = 'https://management.azure.com/subscriptions/' + $SubscriptionID + '/providers/Microsoft.RecoveryServices/vaults?api-version=2018-01-10'
    Headers = @{
        Authorization = $AuthHeader
    }
}

$Vaults = (Invoke-RestMethod @ListRSVaultsParams).value
$Jobs = ForEach ($VaultId in $Vaults.id)
{
    $Results = @()
    $JobUri = 'https://' + $BaseHost + $VaultId + '/backupJobs?api-version=2018-01-10&$filter=startTime gt (now() sub duration P1D)'
    do
    {
        $JobParams = @{
            Uri     = $JobUri
            Headers = @{
                Authorization = $AuthHeader
            }
        }
        $JobResults = Invoke-RestMethod @JobParams
        $Results += $JobResults.value
        $JobUri = $JobResults.nextLink
    } while ($JobResults.psobject.name -contains 'nextLink')
    $Results
}

1 个答案:

答案 0 :(得分:0)

我们尚不支持OData格式支持的所有值。开始时间和结束时间代表范围查询的开始/结束。你能用类似的东西吗? $filter=startTime eq 'string representation of DateTime'而不是大于?