首页 > 解决方案 > 使用基于日期比较的 powershell 更新 SharePoint 列表字段

问题描述

我目前正在尝试更新 SharePoint 字段(如果 dateFormat 字段等于或小于当前日期,则称为 Overdue to Yes 的下拉字段。在此阶段,它不会更改值。我错过了什么。请参考我的代码有下面。谢谢

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}

$SPWeb = Get-SPWeb "http://contoso/sites/test";
$List = $SPWeb.Lists["Catalog"];
$currentDate = Get-Date (Get-Date) -format dd/MM/yyyy;
$items = $List.Items;
foreach ($item in $items) {

    $deadline = $item["TA Deadline"];
    $dateFormat = Get-Date $deadline -format dd/MM/yyyy;
    #if date Format is less or equal than current date then update the Overdue drop down field to yes
    if($dateFormat -le $currentDate)
    {

        $item["Overdue"]  = "YES"
        $item.Update()

    }
}
$SPWeb.Dispose();

标签: powershellsharepoint

解决方案


我认为您需要为选择提供索引/数值。请参阅此处的博客文章。

正如它所提到的,你可以这样做:

$item["Overdue"] = 0; #assuming 0 == YES

或者

$item["Overdue"] = $list.Fields["Overdue"].GetFieldValue("YES");

日期时间逻辑的新代码

if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
    Add-PSSnapin Microsoft.SharePoint.PowerShell;
}

$SPWeb = Get-SPWeb "http://contoso/sites/test";
$List = $SPWeb.Lists["Catalog"];
$currentDate = Get-Date;
$items = $List.Items;
foreach ($item in $items) {

    $deadline = $item["TA Deadline"];
    $dateFormat = [datetime]$deadline
    #if date Format is less or equal than current date then update the Overdue drop down field to yes
    if($dateFormat -le $currentDate)
    {

        $item["Overdue"]  = "YES"
        Write-Debug $item["Overdue"]
        $item.Update()

    }
}
$SPWeb.Dispose();

推荐阅读