2017-08-11 121 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 
     } 
} 

以上是我最終的解決方案