2011-02-14 7 views
0

私は以下を試してみましたが、何の結果も得られていません 私はこれをうまくやっていますか分かりません。 はforeachの中や私のif文で私をフィルタリングすることができ、事前に おかげフィルタリングしても、共有リストにpowershellの項目があります

[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"] 
} 

答えて

2

あなたforeachに複雑な式を使用することができます。私は、コードをもう少し読みやすくするために、結果を保証するために、@()でそれをラップします配列(長さ0、1またはnのいずれか)などである。

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

また、あなたは、日付のテストだ簡素化することができます日時などにDateプロパティを使用して:

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

またif文の条件内で複雑な式を置くことができますが、PowerShellは唯一の文が$true$falseであるかどうかを評価します。 PowerShellは、次のようなものを取ろうとする多くの強制を行います。

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

そして、それをブール値に変換します。基本的に、パイプラインが空でない結果に評価された場合、結果は$true、それ以外の場合は$falseとなります。これはおそらくあなたが意図したものではありません。

+0

ありがとうKeith.私はSPQueryとcamlを使って仕事を終えました – naijacoder

2

はこれを試してください:あなたは上記のやっているよう

$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"] 
    } 
} 
関連する問題