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)
0 件のコメント:
コメントを投稿