PS > $a=((1,2,@{a=10;b=11}),(4,5,@{a=20}),(7,8,@{a=30;b=12})) PS > $a.a 10 20 30 PS > $a.b 11 12 PS > $a.a.length 3 PS > $a.b.length 2 PS > $a.a[0] 10 PS > $a.a[0]=100 PS > $a.a[0] 10 PS > $a[0].a=100 このオブジェクトにプロパティ 'a' が見つかりません。プロパティが存在し、設定可能であることを確認してください。 発生場所 行:1 文字:1 + $a[0].a=100 + ~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : PropertyAssignmentException PS > $a.a 10 20 30 PS > $a[0][2].a 10 PS > $a[0][2].a=100 PS > $a.a 100 20 30 PS > $a.b[1] 12 PS > $a[1].b PS > $a[0].b 11 PS > $a[2].b 12 PS > $a[2].b=120 このオブジェクトにプロパティ 'b' が見つかりません。プロパティが存在し、設定可能であることを確認してください。 発生場所 行:1 文字:1 + $a[2].b=120 + ~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : PropertyAssignmentException PS > $a.b[1] 12 PS > $a[1].b PS > $a.b[1] 12 PS > $a.b[1]=120 PS > $a.b 11 12 PS > $a[2][2].b 12 PS > $a[2][2].b=120 PS > $a.b 11 120 PS >このほか、forなどループ文にたいしても=で結果を変数に代入できるけれど、これはパイプと同じくループ文の塊の中で出力した結果が変数に入るみたい。 使いどころはあるのだけれど、powershellは癖が強いなぁ。 そういえば、メイン?で使っていたブログがサービス終了となっていましたので、つぶやきはこちらだけになりそうです。
2020年10月3日土曜日
PowerShellでの配列の中のオブジェクトアクセス
以下試してみた結果、PowerShellの配列を正しく指定しなかった場合でもPowerShellが裏で仕事をして、いい感じにデータを採取してくれるみたい。
ただ更新の場合は、オブジェクト位置を正しく示している場合のみ、更新できるみたい。
正しく位置指定をしなかった場合、配列の添え字が入れられていないものは配列全体を走査して、見つかったものを返す。複数みつかれば配列として返してくれるみたい。だけど、当然というか、PowerShellが裏で仕事して引っ張ってきたデータについては、更新がエラーになったり無効となったりしている。
データ構造の理解があいまいだと、値書き換え時に大変なことになりそうな予感がする。
まあ、データ構造を完全把握していれば、データベース的に検索ができそうなきがするが。。。
登録:
投稿 (Atom)