比较PowerShell / SharePoint列表日期



我正在尝试使用PowerShell从Sharepoint列表中获取日期,并比较今天的日期以查看是否有匹配项。

到目前为止,我有一些代码,但它似乎不起作用。我猜我在进行比较或类似性质的事情时有一些数据类型错误。这是我到目前为止在下面拥有的代码:

$unusableDatesArray使用 CAML 查询设置为在 SharePoint 中的列表 SharePoint 中日期字段的列名称称为"不可用日期",类型为日期/时间

$todaysDate = Get-Date
$foundUnusableDate = $false
ForEach($item in $unusableDatesArray) {
if($item['UnusableDate'] -eq $todaysDate) {
$foundUnusableDate = $true
}
}

尽管当我找到匹配的日期时,这两个值似乎都8/10/2017 12:00:00 AM为值,但$foundUnusableDate永远不会成为真。如果有人知道我做错了什么,请插话。

>-eq 是一个"困难"的比较运算符,要从中获得$true,两个变量都需要在完全相同的日期时间。这将返回$true:

$date1 = [datetime]'8/11/2017 12:00:00'
$date2 = [datetime]'8/11/2017 12:00:00'
if ($date1 -eq $date2) {$true
} else {$false}

而一秒钟的简单差异会导致它返回$false

$date1 = [datetime]'8/11/2017 12:00:00'
$date2 = [datetime]'8/11/2017 12:00:01'
if ($date1 -eq $date2) {$true} else {$false}

要解决此问题,您可以使用不同的方法

$date1 = [datetime]'8/11/2017 12:00:00'
$date2 = Get-Date
if (('{0:yyyyMMdd}' -f $date1) -eq ('{0:yyyyMMdd}' -f $date2)) {$true} else {$false}
if ($date1.Date -eq $date2.Date) {$true
} else {$false}
$date1 = ([datetime]'8/11/2017 12:00:00').Date
$date2 = (Get-Date).Date
if ($date1 -eq $date2) {$true} else {$false}
$dateToCheck = Get-Date
ForEach($item in $unusableDatesArray) {
[DateTime]$sharePointDate = $item['UnusableDate']
if(Get-Date $sharePointDate -Format 'MM/dd/yyyy') -eq (Get-Date $dateToCheck -Format 'MM/dd/yyyy')) {
$foundUnusableDate = true
}
}

以上是我的最终解决方案

最新更新