2016-07-08 5 views
0

次のPowerShellコードを実行して受信トレイ内の一致を検索し、一致するものが1つしかないインスタンスでフィルタが動作しない理由が不明です。一致を見つけてフィルタリングするコードは次のとおりです。 1回の一致でPowerShellのカウントが機能しない

Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null 
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type] 
$outlook = new-object -comobject outlook.application 
$namespace = $outlook.GetNameSpace("MAPI") 
$inbox = $namespace.getDefaultFolder($olFolders::olFolderInBox) 
$filter = (%{$inbox.items | Where {$_.SenderName -match ‘JoeUser’ -and 
$_.UnRead -eq $true}}) 

...と私は $ filter.countを実行することにより、マッチの数を求めるとき、私はAS LONG複数の一致があるので、正しい答えを得ます。したがって、受信トレイに一致するメッセージが1つしかないシナリオでは、 $ filter.countは何も返さず、後続のコードがメッセージ処理に失敗します。一致するものが見つかったことがわかりますメッセージは $ filter

から見ることができるので、このカウントが$ filterからの1つの一致では機能しない理由を理解できますか?

答えて

1

割り当ての右側で1つの値しか返されない場合、変数は配列としてキャストされません。

これに対処前回の質問の束があります。次のように

は、 '@' を追加することによって固定することができます。 :

$filter = @(%{$inbox.items | Where {$_.SenderName -match ‘JoeUser’ -and $_.UnRead -eq $true}}) 

どうやら、PowerShellのv3では、この動作の変更:http://arstechnica.com/civis/viewtopic.php?t=1235149

+0

おかげで正しい答えを得ることができます示唆します!その小さなアンパサンドは、あなたが述べたように働いた!明らかに、私の$フィルタを文字列から配列に変更したところで、$ filter.countの値が1に正しくなっています。 冗長な質問に対する謝罪。 – mandg

0

何のほかに他の人はあなたが常に$filter | measure | % count

関連する問題