私はList(EmailItemの)を返すDLLアセンブリを持っています。 EmailItemは、実行にかかる処理時間のために遅延ロードするいくつかのプロパティを含むカスタムクラスです。基本的に私のビジネス要件に基づいたヘルパーです。Where-Objectは、関連するオブジェクトではなく、ソースオブジェクトの* all *プロパティを評価するのはなぜですか?
Windowsサービスおよびコンソールアプリケーションでこれらのオブジェクトを処理すると、これらのプロパティは静かに呼び出されるのを待っています。
PoShを使用してこれらのクラスのセットを取得し、Where-Objectを使用してそれらをフィルタリングすると、Where-Objectスクリプトブロックやスクリプト内の他の場所で参照されなくても。カスタムフィルターを作成しようとしましたが、同じ動作を経験しました。 Select-Objectを使って気にする値を投影しても、同じことが起こります。
オブジェクトがPSObjectsに変換され、PowerShellによってプロパティが設定されていると推測されます。
これを回避する方法やこのスクリプトをオフにする方法はありますか?私はこれらのヘルパーを含まない "軽量"オブジェクトを追加する過程にありますが、それはお気に入りのWindowsスクリプティング言語をサポートするだけの厄介な作業です。
ありがとうございました!
「Select-Objectを使用したい値を投影しても、同じことが起こります。」本当に?!これは起こってはいけません....これは、むしろ無駄な選択オブジェクトをレンダリングします! – Tom
「Where-Object」ステートメントはどのように見えますか? – Rynant
私の簡単なテストでは、あなたが説明しているように 'Where-Object'は動作しないことがわかります。結果がコンソールに書き込まれたときにプロパティが実際に評価される可能性はありますか?それで、すべての特性を実際に評価することができます。 –