2017-08-11 88 views
0

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

到目前为止我有一些代码,但它似乎并没有工作。我猜测,当我正在进行比较或某种性质时,我有一些数据类型错误。这是我到目前为止下面的代码:

$ unusableDatesArray设置有CAML查询列表在SharePoint SharePoint中的日期字段的列名被称为“UnusableDate”并键入日期/时间

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

即使这两个值在我找到匹配的日期时似乎有8/10/2017 12:00:00 AM作为值,$foundUnusableDate永远不会是真的。如果有人知道我在做什么错误,请加入。

+1

您可能必须将列表中的日期转换为日期时间对象。 '[日期时间] $ item ['UnusableDate']' –

+0

是的,这也是我的问题的一部分,谢谢。 –

回答

0

-eq是一个“硬”比较运算符以获取$ true,两个变量都需要处于完全相同的日期时间。这将返回$真:

$date1 = [datetime]'8/11/2017 12:00:00' 
$date2 = [datetime]'8/11/2017 12:00:00' 

if ($date1 -eq $date2) {$true 
} else {$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} 
+0

上述两个答案都是正确的。我意识到我不得不把我的价值从SharePoint作为一个.net对象[日期时间]投下,并且我必须将日期时间的末尾切掉以仅作为日期,以便我不必担心时间区或毫秒或其他与时间有关的问题。我会在下面发布我的最终代码以防万一有人帮助。 –

0
$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 
     } 
} 

以上是我最终的解决方案