Powershell 将对象转换为日期,然后进行比较

Powershell 将对象转换为日期,然后进行比较,powershell,Powershell,我的目的是得到一份特定日期的报告(yersterday)。 我有这种类型的对象: @odata.type : #microsoft.graph.anonymousIpRiskEvent id : //////// riskEventStatus : active riskLevel : medium riskEventType : AnonymousIpRiskEvent riskEventDateTime : 2018-10

我的目的是得到一份特定日期的报告(yersterday)。 我有这种类型的对象:

@odata.type       : #microsoft.graph.anonymousIpRiskEvent
id                : ////////
riskEventStatus   : active
riskLevel         : medium
riskEventType     : AnonymousIpRiskEvent
riskEventDateTime : 2018-10-16T08:45:16.3264945Z
closedDateTime    : 
createdDateTime   : 2018-10-16T09:52:05.0144201Z
userId            : /////////
userDisplayName   : ////////
userPrincipalName : ////////
ipAddress         : ////////
location          : ////////
显然,我在名为$event的对象中有更多的事件,我只想做一个if:对于$event中的每个事件,如果createdDateTime是昨天创建的,那么将它放在一个对象上。 我可以创建自定义对象并在以后导出,但我真的不知道如何将日期与getdate.adddays(-1)进行比较。
提前感谢。

您需要将字符串转换为
datetime
对象,然后才能进行比较。它的格式已经允许将其转换为
[datetime]
类型。例如:

if ([datetime]$Event.createdDateTime -lt (get-date).adddays(-1) {
    ..
}
如果要基于此属性进行筛选,可以执行以下操作:

$Events | Where-Object {[datetime]$_.CreatedDateTime -lt (Get-Date).AddDays(-1)}

我正要建议使用
Where对象
。。。(+1)筛选器不起作用,它仍显示任何日期的事件当前筛选器应显示任何早于1天的事件。如果您只想获取前一天的事件,您可能需要执行类似于
$events | Where Object{[datetime]$\.CreatedDateTime-lt(get Date).AddDays(-1)-和[datetime]$\.CreatedDateTime-gt(get Date).AddDays(-2)}
的操作,如果我将第一个解决方案用于类型为“System.Object[]”的值转换为类型为“System.DateTime”。这可能是因为$Event是对象的集合,而不是单个对象。Where as using Where Object单独筛选集合中的每个对象。请记住,
(获取日期)。AddDays(-1)
将保留当前的本地时间。要与昨天的00:00:00进行比较,请使用
(Get Date).AddDays(-1).Date
获取“昨天”的最佳方法是将其与午夜进行比较。这是通过
[datetime]::today
完成的,如果([datetime]$event.createdDateTime-lt[datetime]::today-和-ge[datetime]::today.adddays(-1)){do this}这将只抓取昨天的日志。@RobertCotterman语法错误,它显示我无法转换System.Object[]类型的“System.Object[]”值键入“System.DateTime”。