PowerShell

【PowerShell】配列(Array)についてまとめてみる

2018年5月29日

こんにちは!そーまんです。

今回は PowerShell で配列について書きました。

できるようになること

配列を使って1つの変数に複数のデータを代入する事ができるようになります。


変数の使い方がまだ理解できていない方は、配列を理解する前に変数を理解する必要があります。以下の記事がお役に立てればと思います。

変数に1 つのデータ(数値や文字列などのデータ)を代入する方法は上の記事で書きましたが、複数のデータを格納したい場合はどうしたら良いでしょうか?


利用ケースとして例えば、スクリプトの処理でログを 1 つのファイルにまとめてエクスポートしたい場合などかなと思います。各々の処理結果を変数に溜め込んで最後にログに書き込むといったイメージです。

では早速始めましょう。


配列とは

配列はデータの構造体で複数のデータを保管する事ができます。配列という大きな箱にデータという小さな箱が入っているようなイメージです。

保管するデータについて、データ型は同じ種類或いは異なる種類で別々にできます。データ型については、以下の記事を参考にしていただければと思います。

配列内のそれぞれのデータのデータにはインデックス番号というものを持ちます。箱に貼ってあるラベルみたいなものだと思ってもらえればと思います。

配列のインデックス番号


インデックス番号は 0 から始まり、データが格納される毎に 1 つずつ番号が増えていきます。

Index にインデックス番号が入り、Value にデータが入ります。0 は配列での最初のインデックス番号。1 は 2 番目のインデックス番号です。


配列の宣言について

PowerShell では配列の宣言は無くても動きますが、宣言する場合は以下のように @() を変数に代入する書き方になります。

$arg = @()

$arg という変数は何でもいいですが、複数のデータが格納されている点において分かりやすい名前にしておくと良いでしょう。思いつかなければ、$Data とか $Array とか、$arg などでも良いでしょう。


配列を作る

それでは配列を作ってみましょう。まずは、$var 変数に 10 を代入して、GetType メソッドでデータ型を見てみましょう。データ型は INT 型ですね。


続いて $var に 200 を代入してみます。 それで $var を見てみますと Object[] になっております。これが配列が格納できる状態、つまり配列の言う名のデータを格納する箱ができた状態になりました。配列が生成された状態がお分かり頂けたかと思います。


配列にデータを代入する

次に、$array に直接、複数の文字列を代入しました。上の宣言で言うと、@() の中にカンマ区切りでデータを入れています。

代入して変数を実行すると、配列に代入したデータが返ってきます。(こんな事はどうでもいいのですが、とりあえずアベンジャーズのメンバーを追加しました。笑)


という事で配列に複数のデータを代入しましたが、図にしてみると以下のようになります。

アイアンマンがインデックス 0 に入り、キャプテンアメリカが 1 に入って... というイメージです。アパートで言えば、1 号室にキャプテンアメリカがいる感じですね。


配列の中を見る

配列にデータを代入しましたが、この配列の中に何が入っているかを確認する事ができます。

では早速ですが配列の中にあるデータの数を見てみましょう。.Length メソッドを使います。データの箱が何個あるか確認する事ができるわけです。


実行結果 5 人表示されましたので、ハルクを表示したい場合はインデックス番号を指定します。3 号室にはハルクがいるよって事です。変身後にはアパートなんかに入れる大きさじゃないでしょうけど(汗)まぁそのツッコミは勘弁してください。


それでは範囲指定をしてみましょう。インデックス番号の 1 から 3 番には誰がいるか見たい時は以下のように書きます。


配列を結合したい場合

今度は、配列と配列をくっつけてみたいと思います。

とりあえず以下の配列を作ってみました。(アベンジャーズを追加したので今度はガーディアンズ・オブ・ギャラクシー:リミックスのメンバーを追加してみました。)

やり方としては、それぞれの配列を代入している変数を + で足して別の変数に代入するだけです。


結合結果、変数に Length プロパティを追加して全員で何人いるか確認します。


結合された配列にデータを追加する

今度は結合された配列に対して、別の方法でデータを個別で追加してみます。

まずは、この配列が固定サイズかどうか、確認します。IsFixedSize メソッドを使います。


配列が固定サイズになっているとはどういう事でしょうか。試しに既存の配列にデータを追加してみたいと思います。


追加できない事がわかりました。またエラーメッセージに "コレクションは固定サイズ" と表示されています。

つまり、@() で作成した配列の場合は固定長サイズである為に、上の方法で配列を結合して配列を作り直す事はできても、Add メソッドで引数にあるデータを配列に追加する事ができないという事になります。

この場合は、+= が使えますが、配列を再構成される事になりますので再構成される分、処理負担はかかります。よって大量のデータを扱う場合は使うべきか検討するほうがよいでしょう。


そこで配列を動的に作る場合は、ArrayList を使う事で可能になります。

ここでは、New-Object System.Collections.ArrayList でオブジェクトを新しく作成します。先ほどのアヴェンジャーズのアイアンマンを追加し、残りのメンバーを追加します。

この辺の詳しい情報については、以下のサイトで確認できます。(新しいタブで開きます。)


ということで、量が多くなってきたので、Array の特徴を少しまとめてみました。

得意な点簡単に使える複数のオブジェクトを保管して使える。
不得意な点固定長である為に、配列に入れる要素を明確にしなければならない。

(後で追加する場合は、新しくオブジェクトを作成しArrayList を使わなければならない。)

検索やソートが遅い。

Array の説明は以上になります。


まとめ

以上になります。いかがでしょうか。配列の使い方は概要含め使い方について概ねお分かりいただければと思います。

今回は配列を扱いましたが、連想配列という方法もありますのでご参考になれば幸いです。

それでは最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-,