我正在使用 powershell 获取 Microsoft Azure 环境的使用情况报告。
为了定义开始和结束时间,我使用以下命令:
$reportedStartTime = (Get-Date -day 1 -hour 0 -minute 0 -second 0)
$reportedEndTime = (Get-Date -hour 0 -minute 0 -second 0)
IF($reportedEndTime -eq $reportedStartTime)
{
$reportedStartTime = ($reportedStartTime).AddMonths(-1)
}
然后我运行:
Get-UsageAggregates -ReportedStartTime $reportedStartTime -ReportedEndTime $reportedEndTime
但我收到以下错误:
Get-UsageAggregates :
InvalidInput: The reportedstarttime for daily aggregation granularity
must have the time set to midnight (0:00:00Z).
但是,如果我调用变量$reportedStartTime
并复制粘贴输出:
Get-UsageAggregates -ReportedStartTime "01 September 2016 00:00:00" -ReportedEndTime "01 October 2016 00:00:00"
它有效...
这是怎么回事?
答案1
根据您的描述,我认为我们可以使用这个脚本来获取使用情况报告:
$reportedStartTime = (Get-Date -day 1 -hour 0 -minute 0 -second 0).datetime
$reportedEndTime = (Get-Date -hour 0 -minute 0 -second 0).datetime
IF($reportedEndTime -eq $reportedStartTime)
{
$reportedStartTime = ($reportedStartTime).AddMonths(-1)
}
Get-UsageAggregates -ReportedStartTime $reportedStartTime -ReportedEndTime $reportedEndTime
这是我的结果:
使用情况报告
如果您还有疑问,欢迎在此回复。谢谢。
答案2
.net DateTime 类型在内部具有“Kind”属性,该属性设置为创建 DateTime 时所在的时区。您需要将此“Kind”设置为 UTC。
在.net 中我确实喜欢用这个 DateTime.UtcNow.Date 来获取今天的 UTC。
(是的,我知道问题是 powershell - 我只是在解释为什么我认为它会失败 - 然后一个精通 powershell 的人可以告诉你如何在 powershell 中实现这一点)