在Where或Where-Object中获取日期

时间:2016-08-24 08:46:45

标签: powershell sharepoint

我有这个

$web = Get-SPWeb "http://sharepoint/mysubsite"
$list=$web.Lists["Scanned Documents"]
foreach ($item in $list.Items | where {$_.Indicator -ne "Expired"})  {
    write-host $item[“Expiry Date”];
    $olddate = Get-Date -Date $item[“Expiry Date”]
    $Now = Get-Date 
    if ($olddate -lt $Now) {
        $item[“Indicator”] = "Expired";
    } else {
        $item[“Indicator”] = " ";
    }
    $item.SystemUpdate();
}

效果很好 - 但是列表可能非常大,所以想要更像这样的东西。

foreach ($item in $list.Items | Where-Object { ($_.Indicator -ne "Expired") -and (Get-Date -Date $_."Expiry Date" -lt $Now) }) {
    #you get the idea
}

但我无法让它发挥作用 - 抱怨在Get-Date内使用Where-Object

我试过

foreach ($item in $list.Items | Where-Object { ($_.Indicator -ne "Expired") -and $_."Expiry Date" -lt $Now }) {
    #you get the idea
}

执行,但带回所有项目而不仅仅是过期日期。

2 个答案:

答案 0 :(得分:0)

在片段中

 ... (Get-Date -Date $_."Expiry Date" -lt $Now) ...

-lt被视为Get-Date cmdlet的参数。要明确cmdlet参数列表结束的位置,只需将其包装在另一对或括号中,如下所示

 ... ((Get-Date -Date $_."Expiry Date") -lt $Now) ...

答案 1 :(得分:0)

感谢帮助人员 - 经过一些试验和错误后,我得到了

foreach ($item in $list.Items | where-Object {($_["Indicator"] -ne "Expired") -and ((Get-Date -Date $_["Expiry Date"]) -lt $Now) }) {