我的午夜时间出了什么问题?

我的午夜时间出了什么问题?

我正在使用 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 中实现这一点)

相关内容