Articles

PowerShell配列ガイド:

配列を使用および作成する方法は、PowerShellの基本的な機能です。 配列は、(生の文字列だけでなく)真のデータ構造を取り込み、操作し、出力することを可能にします。 この機能により、PowerShellは他のスクリプト言語とは異なり便利になります。

この記事では、配列とは何か、およびPowerShellでそれらを使用する方法について説明します。 まず、PowerShellで配列を作成する方法、次に基本的な関数を使用してそれらを操作する方法を示します。, 次に、いくつかの異なるタイプの配列を見て、それらのより微妙な機能のいくつかを探ります。

無料のPowerShellおよびActive Directory Essentialsビデオコースを入手してください

新しいPowerShellユーザーと上級PowerShellユーザーの両方にこれをお勧めします。 広告ツールを構築することは素晴らしい学習体験です。

私たちの目的は、PowerShellで配列を操作する際の良い基盤を提供することです。 これらの基本を習得したら、PowerShellに関するコースを見て詳細を学ぶことができます。,

  • 配列の基礎
  • オブジェクトの配列
  • 配列の演算子
  • 配列に値を追加する方法
  • 配列型
  • 高度な配列関数

PowerShell配列

配列は、ほぼすべてのプログラミング言語 これらは、複数のデータのコレクションとして機能するデータ構造です。 配列を操作する場合は、同じコマンドを使用して配列内の各項目に対して同じ機能を実行するか、インデックスを使用して個々の要素にアクセスして,

PowerShellの配列には、一つ以上の項目を含めることができます。 アイテムには、文字列、整数、オブジェクト、または別の配列を指定でき、配列にはこれらのアイテムの任意の組み合わせを含めることができます。 これらの項目のそれぞれにはインデックスがあり、常に0から(時には混乱して)始まります。 したがって、配列内の最初の項目にはインデックス0が与えられ、二番目の項目には1としてインデックスが付けられます。,

PowerShell配列はPowerShellの基本的な部分であり、すべてのPowerShellチュートリアルに表示されます。Office365の構成からペンテストにPowerShellを使用するまで、PowerShellを使用する多くの面で、それらの操作方法に関する十分な知識が不可欠です。

PowerShell配列の例

配列が何であるかを説明する最も簡単な方法は、例を取ることです。 のは、果物のボウルを表す配列を作ってみましょう。,Powershellで配列を作成するにはいくつかの方法がありますが、最も簡単なのは次のコマンドを実行することです。

@()

これにより空の配列が作成されます。 しかし、空の配列はそれほど有用ではないので、新しい配列にいくつかの果物を追加しましょう。 これらはテキスト文字列として表されます。 これを行うには、次のコマンドを実行します

$fruit = @('Apples','Oranges','Bananas')

これにより、配列に”fruit”という名前が付けられ、三つの項目が追加されます。, これが機能していることを確認するには、次のコマンドを使用して配列を読み取ることができます。

PS /Users/yourname> $fruit

これは次のように返されます。

 Apples Oranges Bananas

ご覧のとおり、この配列は個々のデータのグループです。 PowerShellは、上記で説明した方法で自動的にインデックスを付けます:”Apple”は0、”Oranges”は1、”Bananas”は2としてインデックス付けされます。

この例では、配列は非常に単純なオブジェクトであり、ある意味ではそうであるように見えるかもしれません。 そのシンプルさ、しかし、もうしてもそのような柔軟かつ強力なオブジェクト。, このガイドの残りの部分では、配列でできることを味わってみましょう。

配列の基礎

このセクションでは、PowerShellで配列を作成および操作する最も基本的な方法について説明します。

配列を作成します

まず、配列を作成します。 これを行う標準的な方法は@()を使用することですが、他の方法があります。

今のところ、”data”という配列を作成しましょう。 これを行うには、次のように実行します。

$data = @()

この配列は、データを指定していないため、現時点では空です。, 配列内にある項目の数を確認するには、count関数を使用できます。

$data.count

配列に項目がないため、現時点では0を返します。 その中にいくつかのデータを含む配列を作成するには、これらのデータを@の後の括弧の中に入れます。

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

同じcount関数を実行すると、この配列に4つのアイテムがあることがわかります。 これらのアイテムを再度表示するには、配列を呼び出すだけです。

$data

配列に入れたアイテムをリストします。,

アイテムへのアクセス

これで配列ができましたので、そこからアイテムにアクセスしたいと思います。 これを行うにはいくつかの方法があります。 最初は、配列内の項目のインデックスを使用することです。 前に述べたように、インデックスは0から始まるので、配列内の最初の項目を取得するには、インデックスがゼロの項目を見るようにPowerShellに指示する必 これを実行することで行います:

$data

これは配列に最初に入れた文字列であるため、”ゼロ”を返します。,

この構文を拡張して、同じコマンドに複数のインデックスを入れるだけで、同じ配列から複数のアイテムを返すこともできます。 たとえば、次のように実行します。

$data

これは”Zero Two Three”を返します。 項目は、索引を入力した順序と同じ順序で返されます。 さらに構文を使用して、配列から項目のセットを返すこともできます。 たとえば、

$data

は、インデックスが1から3(含む)のすべてのアイテムを返します。, And:

$data

配列内の最後の項目を返します:負の数はPowerShellに配列の最後から後方にカウントするように指示しますので、この場合、このコマンドは”Three”、テスト配列の最後の項目を返します。

アイテムの変更

同じメソッドを使用して配列内のアイテムを更新することができます。 たとえば、インデックスが2のアイテムを更新するには(これは配列内の第三のアイテムであることを覚えておいてください)、次のように実行できます。

$data = 'second'

これにより、配列内のアイテムに直接アクセスできます。,

反復アクション

PowerShellの最も強力な機能の一つ(実際には、任意のコマンドラインインターフェイス)は、配列内のすべての項目に対して同じアクショ これを行うにはいくつかの異なる方法があります。

最も基本的なのは、文字|であるパイプラインを使用することです。 配列をパイプラインに渡すと、配列内の各項目が個別に処理されます。 PowerShellオブジェクトとデータパイピングに関する記事で指摘したように、これは多くの場合、反復処理を実行する最も簡単な方法です。,

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

$data | ForEach-Object {"Item: "}

このコマンドは、PowerShellに$data内のアイテムを一つずつ取り込み、それぞれについて”Item:”を最初に追加し、その後に元の値を追加します。

PowerShellで反復操作を実行するには、他にもいくつかの方法がありますが、その多くは、他のプログラミング言語を使用している場合によく知られています。PowerShellには、ForEachループ、Forルー 詳しくはこれらのチェックをMicrosoftます。,

オブジェクトの配列

これまでのところ、基本的なデータを含む配列、つまり文字列を扱ってきました。 ただし、配列にはオブジェクトを含めることもでき、Office365の構成など、PowerShellの最も一般的な使用方法の多くは、オブジェクトの操作方法を知っている必 それでは、それを行うためのいくつかの基本的なコマンドを見て

オブジェクトの配列の作成

@()関数を使用して、文字列で行ったのと同じ方法でオブジェクトの配列を作成できます。, たとえば、従業員のテストリストを作成するには、

ほとんどのコマンドレットは、作業する変数を割り当てるときにこのタイプの配列を返します。

配列からオブジェクトにアクセスする

個々のデータにアクセスするために上記で実行したプロセスは、オブジェクトを含む配列でも同様に使, たとえば、

$data

を実行すると、

 FirstName LastName ----- ---- Kevin Marquette

また、同じコマンド内でどのプロパティを指定するかを指定することで、個々のオブジェクトのプロパティにアクセスできます。

$data.FirstName

“Kevin”を返します。

配列内のオブジェクトプロパティの更新

さらに、同じ構文により、配列内に保持されているオブジェクト内の個々のプロパティを更新できます。, たとえば、

$data.FirstName = 'Jay'

配列の最初の項目のFirstNameプロパティを”Jay”に更新します。

オブジェクトの配列内のすべてのプロパティへのアクセス

ほとんどのプログラミング言語では、オブジェクトの配列内のすべてのプロパティにアクセスするために反復プロセス(上記参照)を使用する必要があります。 もちろん、PowerShellでもそれを行うことができます。

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

これは、配列内のすべてのLastNameプロパティのリストを返しますが、このデータを見たいたびに計算コストがかかり、書き込みが難しくなります。, ので代わりに、ユーではストメニューから起動できます。 これを実行します:

$data.LastName

同じリストが表示されます。 PowerShellは実際には前と同じように各オブジェクトを順番に取りますが、この複雑さを隠します。

配列用の演算子

PowerShellで個々のデータ項目に使用するほとんどすべての演算子も配列で動作しますが、この方法で使用すると少し異なる動作をするものもあります。 それでは、最も一般的な演算子と、それらを配列でどのように使用できるかを見てみましょう。,

-join

-join演算子は、PowerShellで最も使用されるコマンドの一つであり、配列を操作するときに非常に便利です。 これは、配列内の項目に対して反復的に使用して、配列の出力でそれらを結合することができます。

例を見てみましょう。 まず、単純な配列を作成します。

$data = @(1,2,3,4)

次に、-joinを使用して各項目の間にハイフンを挿入し、結果を出力します。

$data -join '-'

“1-2-3-4″を返します。, -Join演算子は区切り文字なしで使用することもでき、配列内の項目は一連の分離されていない値として出力されます。

-contains

-contains演算子は、単一のデータポイントでの使用と非常によく似た方法で配列で動作します。 これを使用して、配列に特定の文字列が含まれているかどうかを確認することができ、ブール値を出力します。 たとえば、

 PS> $data = @('red','green','blue') PS> $data -contains 'green' True

等式

PowerShellで等式をチェックするための二つの演算子があります:-eqと-ne。, ただし、これらを単一の値で使用することに慣れている場合、これらが配列に関連して機能する方法は少し奇妙に見えることがあります。 たとえば、-eqを使用すると、演算子はBoolean”True”を出力せず、代わりに一致するオブジェクトを返します。

例えば:

 PS> $data = @('red','green','blue') PS> $data -eq 'green' green

-ne演算子は、指定した値と等しくないすべての値を与えることを除いて、ほぼ同じ方法で動作します。, したがって、

 PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue

ただし、if()ステートメントを使用して、これらの演算子の出力と期待される出力を比較し、”True”または”False”出力を返すこと

配列に値を追加する方法

上記のすべての手順の後、配列にデータ項目を追加することを省略した理由をおそらく疑問に思っています。 それはそれをする方法がないのである。 一度作成された配列は永遠に同じサイズのままなので、それを大きくするには、新しい配列にコピーして元の配列を削除する必要があります。,

それは複雑に聞こえますが、Powershellは一連の非常に単純な演算子を使用してこのプロセスを処理します。 これを行うには二つの主な方法があります。

配列追加

PowerShellは、システムが実際に行っていることの複雑さを隠す”+”演算子を使用して二つの配列を一緒に追加することができます。 たとえば、次のような二つのテスト配列を作成する場合:

 $first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )

次に、

 PS> $first + $second

これにより、四つの値を持つ新しい配列が作成され、結果が出力されます。, ただし、この新しい配列に新しい名前は与えられないことに注意してください。 これを行うには、+=演算子を使用します。

配列を組み合わせるためのPlus Equals

上記の例で”+”演算子を使用する代わりに、”+=”演算子を使用することで、まったく新しい配列が得られます。

 $first += 'Two, Three'

コマンドはシンプルに見えますが、PowerShellがここで実際に行っていることを隠しています。 $Firstからすべての値をコピーし、余分な値を含む新しい配列を作成しています。 次に、元の配列を削除します。,

これは計算コストがかかるため、多少問題があります。 小さな配列では気付かないかもしれませんが、大量のデータを使用すると、この方法でシステムをすばやくロックできます。 だからこそ、この問題を回避する方法を以下に示しました。

配列型

これまでのところ、PowerShellのデフォルト配列を扱ってきました。 PowerShellは当時私たちに教えてくれませんでしたが、これまでに作成したすべての配列は一つのタイプであり、]タイプです。 このタイプの配列は、任意のタイプのデータ値を保持できます。,

厳密に型指定された配列

ただし、配列が保持できるデータまたはオブジェクトの型を一つだけに制限したい場合があります。 これを行うには、指定されたデータ型のみを含めることができる厳密に型指定された配列を使用します。

たとえば、整数のみを取ることができる配列を作成するには、次のように使用できます。

 PS> ] $numbers = 1,2,3

間違った型のデータ値を厳密に型付けされた配列に入れようとすると、エラーコードが返されます。

ArrayList

上記で述べたように、配列にアイテムを追加するのは面倒なことがあります。, しかし、これをよりエレガントに処理する別のタイプのコレクションArrayListがあります。 ただし、このタイプのコレクションを使用するには、.Net frameworkを呼び出す必要があります。.net frameworkは、不幸な出力をスローする可能性があります。

ArrayListを作成し、それにアイテムを追加するには、次を実行します。

 $myarray = ::new() $myArray.Add('Value')

ここでは、デフォルトの.Netコンストラクタを使用して新しいArrayListを作成し、-Add演算子を使用してアイテムを追加します。 演算子は、これらのコマンドがコードを混乱させる奇妙な出力を投げ出すことがあるためです。,

さらに進む

これらはPowerShellで最も一般的な配列型ですが、他にもいくつかあります。 PowerShellユーザーとして開発している場合は、ストレート配列の代わりにArrayListsを使用し始めると便利ですが、このタイプの配列は上級ユーザーが使用しないことにも注意

代わりに、ほとんどの経験豊富なコーダーはListと呼ばれる一般的なリストタイプを使用します。 このタイプのリストは、C#から直接得られているため、使用するのが少し複雑ですが、一度それを習得すると、これまでに説明した配列よりもはるかに,

高度な配列関数

これまでに取り上げた基本機能に加えて、より高度な配列関数と、より頻繁に使用するようになるにつれて注意すべきいくつかの追加機能もあります。

事前サイズの配列

上記の配列を作成する標準的な方法は、その中のアイテムの数によって決定されるサイズの配列を作成します。 ただし、new($size)コンストラクターを使用して、指定したサイズの配列を作成できます。

あなたはこのようにそれを行うことができます:

 $data = ]::new(4)

あなたが実行する場合a。,この配列のクエリをカウントすると、データがなくてもスペースを0で埋めるため、”4″が返されます。 これは実際には、事前サイズの配列が最初に0で埋められるため、ゼロで埋められた新しい配列を初期化する必要がある場合に非常に便利です。

配列の乗算

配列内のオブジェクト、特に文字列を乗算することは、最初に行う必要があるときにほとんどの人を混乱させるものです。, この結果を達成するために非常に複雑なif()スクリプトを見てきましたが、はるかに簡単な方法があります:

 PS> $data = @('red','green','blue') PS> $data * 3

うん、そうです。 これにより、各値が三回繰り返された新しい配列が作成されます。 また、このコマンドを使用して、選択した値で配列を作成し、好きなだけ何度でも乗算することで、配列をゼロ(またはその他のデフォルト値)で埋める

ネストされた配列

他の多くのプログラミング言語と同様に、PowerShellはネストされた配列をサポートします。, PowerShellでこれを行う標準的な方法は、多次元配列を使用することです。 これの最も簡単な例は、二次元配列を作成することです。

 $data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )

このコマンドで作成しているデータ構造は古典的な行列であり、他のプログラミング言語のように扱うことができます。 たとえば、この配列から特定の値にアクセスするには、二次元を指定する必要があります。,

たとえば、値”3″にアクセスするには、次のようにします。

 PS> $outside = 0 PS> $inside = 2 PS> $data 3

このコマンドを使用して任意の値にアクセスできますが、行列の各レベルの中に入れ子になった角かっこを追加する必要があります。

最後の言葉

上記のすべての手順は、PowerShellを初めて使用するユーザーにとっては非常に多いかもしれませんが、言語を学ぶ方法として慎重に選 さまざまなテクニックを組み合わせることで、強力なスクリプトを構築して、PowerShellで行う最も頻繁で時間のかかる作業の多くを自動化できます。,

これらのスキルは、PowerShellを超えるのにも役立ちます。 NetCatやNmapのように、サイバーセキュリティの管理に使用される最も一般的な言語の多くは、PowerShellと同じ原則の多くを使用しています。 などを利用ユーへのサイバーセキュリティ対策をすることができる多目的学習にどのようにお客様のシステムをより一般的です。