PowerShell和SharePoint - 比较数组中的数据

时间:2014-01-17 20:24:41

标签: arrays date sharepoint powershell

我在SharePoint列表中有数据(日期),我试图与数组中的数据(多个日期)进行比较。如果数组中有一个项目(当时不是一个数组),它可以工作,但不止一个它失败了。 SharePoint列表包含一个日期(格式为M / dd / yyyy),如果我的脚本在该日期之后的三天内运行,它将执行更多操作,否则将失败。最后我需要在六十天前拿到它,所以为了保持脚本可管理我想让阵列工作。将60天重新安装回阵列将是我的下一个挑战。

我希望我能够在脚本中使用相对于当天的日期数组。设定的硬日期不起作用。我试图查看SharePoint中的日期是否在数组中。

$item is an item from the SharePoint list, and the stuff in brackets ["..."] is the column header.

这就是我获取日期的方式:

$today = (get-date).ToString("M/dd/yyyy")
$yesterday = (get-date).AddDays(-1).ToString("M/dd/yyyy")
$twodaysago = (get-date).AddDays(-2).ToString("M/dd/yyyy")

这是我的阵列: enter code here $ scheduledate = $ today,$ yesterday,$ twodaysago

这是逻辑:

 if(($item["Computer"] -eq "$computer") -and ($item["Status"] -eq "No") -and ($item["Schedule Date"] -contains $scheduledate))

其他尝试:

If $scheduledate is set to this it works:  

$ scheduledate = $ today

如果$ scheduledate设置为this,则不起作用:$scheduledate = $today,$yesterday,$twodaysago

我甚至明确地创建了数组,它不起作用:$scheduledate = @($today,$yesterday,$twodaysago)

行情,空间,已经尝试过。

我试过这些:

-and ($item["Schedule Date"] -eq $scheduledate)) - works if dates match

-and ($item["Schedule Date"] -contains $scheduledate)) - works with single item in array

-and ($item["Schedule Date"] -match $scheduledate)) - ?

-and ($item["Schedule Date"] -like $scheduledate)) - ?

这有效,但六十天不理想:if(($ item [“Computer”] -eq“$ computer”) - 和

($item["Status"] -eq "No") -and `
                ($item["Schedule Date"] -contains $today) -or ($item["Schedule Date"] -contains $yesterday) -or ($item["Schedule Date"] -contains $twodaysago))

我不确定如何弄清楚SharePoint中的数据格式是什么,或者它是否重要。

请帮忙。

2 个答案:

答案 0 :(得分:1)

使用-contains运算符时,您需要翻转变量。您的参考值或数组需要位于左侧,测试值需要位于右侧。请参阅TechNet documentation on about_Comparison_Operators

此外,正如@ websch01ar指出的那样,格式需要匹配以及类型(字符串到字符串或日期到日期)。你可以采用任何一种方式,但只要格式和类型相同,这样的东西就应该有效:

[String]$today = (get-date).ToString("M/dd/yyyy")
...
[String[]]$scheduleDate = $today, $yesterday, $twodaysago
(... ($scheduleDate -contains $item["Schedule Date"].ToString("M/dd/yyyy")))

这假定$item.Fields["Schedule Date"].GetType().FullName等于Microsoft.SharePoint.SPFieldDateTime

答案 1 :(得分:0)

SharePoint以特定格式存储数据。以下是我使用格式的几个函数:

function ToSPDateTime
{
    param($date)
    if ($date -ne $null)
    {
        return [System.Convert]::ToDateTime($date).ToString("yyyy-MM-ddTHH:mm:ssZ")
    }
    else 
    {
        [string]::Empty
    }
}

function ToSPDate
{
    param([datetime]$date)
    if ($date -ne $null)
    {
        return [System.Convert]::ToDateTime($date).ToString("yyyy-MM-dd")
    }
    else 
    {
        [string]::Empty
    }
}