我有一个DLL程序集,返回一个列表(EmailItem)。 EmailItem是一个自定义类,它包含一些由于执行处理时间而导致的延迟加载的属性。他们基本上是基于我的业务需求的助手。为什么Where-Object会评估源对象上的所有*属性而不是相关的属性?
当我在Windows服务和控制台应用程序中使用这些对象时,这些属性静静地坐在那里等待被调用。
但是,如果我使用PoSh检索这些类的集合,然后使用Where-Object对其进行筛选,则即使它们未在Where对象脚本块或脚本中的其他任何地方被引用,也会对这些属性进行评估。我已经尝试编写自定义过滤器,但体验相同的行为。即使投射我关心使用Select-Object的值也会做同样的事情。
我最好的野驴猜测是对象正在转换为PSObjects并且PowerShell正在填充属性。
任何想法如何避免此问题或关闭此脚本?我正在添加不包含这些助手的“轻量级”对象,但这只是为了支持我最喜欢的Windows脚本语言而烦人的工作量。
感谢您的任何提示!
“即使使用Select-Object来投影我所关心的值也是一样的。”真?!这不应该发生....这使得选择对象而不是无用的! – Tom 2012-01-27 14:26:43
你的'Where-Object'语句是什么样的? – Rynant 2012-01-27 15:40:37
我的简单测试表明'Where-Object'不像你描述的那样工作。将结果写入控制台时,是否有可能实际评估了您的属性?然后所有的属性都可以被评估。 – 2012-01-27 16:13:01