次のような親子関係を持つオブジェクトがあるとします。
public class Node
{
public string Name { get; set; }
public string Type { get; set; }
public Node Parent { get; set; }
}
ここで、次のような構文をサポートするコマンドレットを作成したいと思います。
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 キーワードが原因でした。キーワードを追加すると問題が修正され、例が機能するようになりました。