假设我有这样的父子关系的对象:
public class Node
{
public string Name { get; set; }
public string Type { get; set; }
public Node Parent { get; set; }
}
现在,我想创建一个支持如下语法的 cmdlet:
Get-Node | where {$_.Type -eq "SomeType" -and $_.Parent.Name -eq "SomeName" }
在这里,Parent 属性需要以某种方式引用管道中的另一个对象。在 PowerShell 中甚至可能发生这样的事情吗?如果没有,有什么替代方案?
[编辑]如果我像这样使用上面的类:
var root = new Node
{
Name = "root",
Type = "root",
Parent = null
};
var nodeA = new Node
{
Name = "A",
Type = "node",
Parent = root
}
WriteObject(root);
WriteObject(nodeA);
然后加载模块并尝试以下命令:
Get-MyNode | where {$_.Parent.Name = "root"}
我收到此错误:
Property 'Name' cannot be found on this object; make sure it exists and is settable.
At line:1 char:31
+ Get-MyNode | where {$_.Parent. <<<< Name = "root"}
+ CategoryInfo : InvalidOperation: (Name:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我希望 Parent 属性能够像真正的 Node 对象一样引用管道中的另一个对象。
[编辑] 此错误是由类定义中缺少 public 关键字引起的。添加关键字解决了问题并使示例工作。