HOWTO · PowerShell

カスタムオブジェクトの配列を PowerShell で初期化する方法

この記事では、配列が何であるか、配列の作成方法、および Windows PowerShell でのオブジェクトの配列について説明します。

配列は Windows PowerShell の基本的な機能です。これにより、正確なデータ構造を取り込み、操作し、出力することが可能になります(生の文字列だけではありません)。

この能力により、PowerShell は他のスクリプト言語とは異なり、より実用的です。

この記事では、配列が何であるか、Windows PowerShell で配列を作成する方法、そしてそれらを操作するための基本的な関数について説明します。

Windows PowerShell での配列の使用

Windows PowerShell の配列には、1つ以上のアイテムを含むことができます。配列は文字列、整数、オブジェクト、または別の配列である可能性があります。

各アイテムには、0 から始まり、アイテムごとに繰り返されるインデックスがあります。

配列を作成する基本的な構文は@() です。

$data = @()

@の後のかっこ内に値を入れることができます:

$data = @('Zero', 'One', 'Two', 'Three')

配列のアイテムを表示するには、名前付き変数を呼び出すことができます:

$data

出力:

Zero
One
Two
Three

Windows PowerShell での配列へのアクセス

配列を持ったので、アイテムにアクセスしたいと思います。これにはいくつかの方法があります。

最初の方法は、配列内のアイテムのインデックスを使うことです。前述のようにインデックスは 0 から始まります。

したがって、Windows PowerShell にインデックスがゼロに割り当てられたアイテムを見させて、配列の最初のアイテムを取得する必要があります。

$data[0]

この構文は、配列に配置した最初の文字列である zero を返します。また、このスニペットを拡張して、同じコマンドで複数のアイテムを返すこともできます。

$data[0, 2, 3]

出力:

Zero
Two
Three

Windows PowerShell を使用して配列内のアイテムを変更する

アイテムを更新するために同じ方法を使用できます。例えば、インデックスが 2 に割り当てられているアイテムを更新するために、次のように実行できます:

$data[2] = 'second'

この方法は、配列内のアイテムに直接アクセスすることを可能にします。

Windows PowerShell で配列を反復処理する

Windows PowerShell の最も強力な機能の 1つは、配列内のすべてのアイテムに同じアクションを実行することです。最も基本的な方法はパイプライン文字(|)を使用することです。

たとえば、配列内の各アイテムに説明を追加するには、このコマンドを使用できます:

$data | ForEach-Object { "Item: [$PSItem]" }

このコマンドは、PowerShell スクリプティング環境に $data 配列のアイテムを 1つずつ取るように指示します。

Windows PowerShell を使用して配列内のオブジェクトを作成する

文字列を使用して、カスタムオブジェクトの配列を作成できます。同様の方法で、配列(@())関数を使用します。例えば、従業員のテストリストを作成するには、次のようにします:

$data = @(
    [pscustomobject]@{FirstName = 'Kevin'; LastName = 'Marquette' }
    [pscustomobject]@{FirstName = 'John'; LastName = 'Doe' }
)

ほとんどの PowerShell ネイティブコマンドは、作業するために変数に割り当てると、このタイプのオブジェクトの配列を返します。

Windows PowerShell を使用して配列内のオブジェクトにアクセスする

以前に個々のデータにアクセスするために通過したプロセスは、オブジェクトを含む配列にも同様に使用できます。

$data[0]

出力:

FirstName LastName
-----     ----
John     Hampton

あるいは、同じコマンド内で呼び出したいプロパティを指定することで、個々のオブジェクトのプロパティを取得できます。

$data[0].FirstName

出力:

John

Windows PowerShell を使用して配列内のオブジェクトを更新する

正確な構文により、配列内のオブジェクトの個々のプロパティを更新できます。

$data[0].FirstName = 'Jay'

Windows PowerShell を使用して配列内のプロパティにアクセスする

ほとんどのプログラミングおよびスクリプト言語では、さまざまなオブジェクト内のすべてのプロパティにアクセスするために反復的な方法を使用する必要があります。Windows PowerShell でもそれが可能です。

$data | ForEach-Object { $_.LastName }

この方法は、配列内のすべての LastName プロパティのリストを返しますが、計算コストが高く、毎回このデータを表示したいときに書くのが難しいです。したがって、PowerShell にはショートカットがあります。

$data.LastName

そして、同じリストが表示されます。PowerShell は、前と同様に各オブジェクトを順番に処理しますが、この複雑さを私たちから隠します。

Windows PowerShell で ArrayList を作成する

配列にアイテムを追加することは難しい場合があります。しかし、ArrayList はこれをより優雅に処理します。異なるタイプのコレクションです。

ただし、このタイプのコレクションを使用するには.NET フレームワークを使用する必要があります。ArrayList を作成し、アイテムを追加するには、次のように実行します:

$myarray = [System.Collections.ArrayList]::new()

[void]$myArray.Add('Value')

ここでは、デフォルトの.NET コンストラクタを呼び出して新しい ArrayList を作成し、Add オペレーターを使用してアイテムを追加できます。

[void] データ型は、これらのコマンドが時折奇妙な出力を生成してコードに干渉するためにあります。