PS>$b = @(1) PS>$a = $b PS>$a | set c PS>$a.ToString() System.Object[] PS>$c.ToString() 1 |
この例をみると明らかに両者が等価でないことが判る。
もともとObject配列だったものがパイプラインを通ることによりInt型に変化している。
配列の個数が1個か複数かで結果の型が変わる例である。
この様に、$a = $b は明らかに等価な代入であるがパイプラインを通した場合は中身が展開されるので必ずしも等価とは限らない。
ちなみに、$aの前にカンマを付けて
,$a | set c
とすると同じ結果を得ることができる。
PowerShell: ◆XMLファイルを扱うの例でいくと、
$xml.SelectNodes($query) | Set-Variable node |
なので、そのプロパティである”#text”が参照できた。
では、$xml.SelectNodes($query)の方はどうやって参照するかというと
PS>,$xml.SelectNodes($query) | gm TypeName: System.Xml.XPathNodeList Name MemberType Definition ---- ---------- ---------- ToString CodeMethod static string XmlNodeList(psobject instance) Equals Method bool Equals(System.Object obj) GetEnumerator Method System.Collections.IEnumerator GetEnumerator() GetHashCode Method int GetHashCode() GetType Method type GetType() Item Method System.Xml.XmlNode Item(int index) ItemOf ParameterizedProperty System.Xml.XmlNode ItemOf(int i) {get;} Count Property System.Int32 Count {get;} |
これで判るように、ItemもしくはItemOfを使えばよさそうだ。
PS>$xml.SelectNodes($query).itemof(0)."#text" 佐藤 PS>$xml.SelectNodes($query).item(0)."#text" 佐藤 |
0 件のコメント:
コメントを投稿