开发者

filtering and though a sharepoint list items with powershell

开发者 https://www.devze.com 2023-02-10 14:40 出处:网络
I have tried below but not getting any result back Not sure if i\'m doing this well. Can i filter in the foreach or in my if statement

I have tried below but not getting any result back Not sure if i'm doing this well. Can i filter in the foreach or in my if statement Thanks in advance

[DateTime] $CreatedDate = $item["Created"] 
$convertedCreatedDate = $CreatedDate.ToString("yyyy-MM-dd")
$today =开发者_开发技巧 (Get-Date).AddDays(-1).ToString("yyyy-MM-dd")

foreach ($item in $list.items | where {$convertedCreatedDate -eq $today}) {

    if ($list.items | where {$convertedCreatedDate -eq $today}) 
    {
        Write-Host $item["Created"] 
    }

    Write-Host $item["Created"] 
}


You can use a complex expression in your foreach as you're doing above. I would wrap it in a @() to make the code a bit more readable and to ensure the result is an array (either length 0, 1 or n) e.g.:

foreach ($item in @($list.items | where {$convertedCreatedDate -eq $today})) {

You can also simplify you're date testing by using the Date property on a DateTime e.g.:

$convertedCreatedDate = ([DateTime]$item["Created"]).Date
$today = (Get-Date).Date

You can also put a complex expression within an if statement condition but PowerShell will only evaluate whether the statement is $true or $false. PowerShell does lots of coercion to try to take something like:

$list.items | where {$convertedCreatedDate -eq $today}

And convert that to a boolean. Essentially if the pipeline evaluates to a non-empty result, the result is $true otherwise it is $false. This is probably not what you intended.


Try this:

$today=(Get-Date).AddDays(-1).ToString("yyyy-MM-dd")

foreach ($item in $list.items) {
    [DateTime]$CreatedDate=$item["Created"]
    $convertedCreatedDate=$CreatedDate.ToString("yyyy-MM-dd")
    if ($convertedCreatedDate -eq $today) {
        Write-Host $item["Created"] 
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消