変数は、あらゆる種類のコーディング(any type of coding)で最も基本的なデータ構造です。しかし、特により複雑なアルゴリズムを扱う場合、単一の変数はほとんどの目的にとって十分ではありません。
そこで登場するのが配列です。C++ であろうとPythonであろうと、配列はすべてのプログラミング言語になんらかの形で存在します。しかし、Windows PowerShellはどうでしょうか。PowerShell配列はどのように機能しますか? それらをどのように使用しますか?それらの構文は何ですか?確認してみましょう。
PowerShell アレイ 101
簡単(Simply)に言えば、配列は変数の構造化されたコレクションです。関連する変数を番号付きのセットにまとめることで、何十もの名前を追跡する煩わしさを解消するという考え方です。
PowerShellでは、変数名の前に $ 記号を追加して変数を作成できます。例えば:
$prime = 13
変数には、数値から文字列まで、あらゆるデータ型を含めることができます。文字列を指定するには、二重引用符または単一引用符を使用するだけです。
$name = “Levin”
新しい配列を作成するには、カンマで区切って同じ変数に複数の値を割り当てるだけです。このような:
$week = “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”
混乱を避けるために変数を明示的に配列にキャストすることを好む人もいますが、それは必須ではありません。これを行うには、値を @ 記号で始まる括弧に入れます。
$week = @(“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”)
これは通常、他のコマンドの出力を配列に入れようとするときに便利で、手動で正しい形式で書き込むことができません。
配列の作成
配列を作成する最も一般的な方法はすでに見てきました。ただし、状況によっては、より適切な方法が他にもあります。たとえば、数値の範囲を含む配列を作成する場合は、範囲演算子を使用できます。
$digits = (0..9)
これにより、0 から 9 までの 10 桁すべての配列が作成されます。後で値を格納する場所が必要な場合に備えて、空の配列を初期化することもできます。
$values = @()
複数(Multiple)の配列を互いに入れ子にすることもできますが、このタイプの使用法は非常に混乱を招く可能性があります。
$coordinates = @(
(5, 10, 23),
(11, 7, 16)
)
デフォルトでは、配列は、数値、文字列、またはその両方の組み合わせなど、任意の変数タイプを格納できます。ただし、入力する値を制限したい場合は、型を明示的に定義できます。例えば:
[int[]] $numbers = 2,3,4,5
このように、配列は整数のみを保持できます。他のタイプの値を割り当てようとすると、エラーが返されます。計算で使用する変数に文字列を入力すると問題が発生するため、これは数値だけを扱う配列の単純なエラーを防ぐのに役立ちます。
配列へのアクセス
これまで、さまざまなタイプのデータを含む配列を作成するための複数の方法を見てきました。しかし、このデータにアクセスするにはどうすればよいでしょうか?
PowerShell配列は、他のプログラミング言語で使用されるものと同じ形式を使用します。各配列変数は、インデックス番号でアクセスできます。例えば:
$var = $numbers[5]
$var変数の$numbers配列のインデックス 5 に格納されている値がコピーされます。配列インデックスは 0 からカウントを開始するため、最初の項目はゼロでアクセスされることに注意してください。
たとえば、これを出力する場合:
“$days[2]”
火曜日ではなく水曜日になります。
これと同じ方法を使用して、これらの値を変更することもできます。たとえば、次のコマンドは、配列の 2 番目の要素をゼロに変更します。
$numbers[1] = 0
算術式のように追加するだけで現在のエントリの値を変更する代わりに、既存の配列に要素を追加することもできます。
$names += “Johny”
このメソッドを使用して、一度に複数のエントリを追加したり、配列全体を追加したりすることもできます。
$names += “Charlie, Liam, Teresa”
$names += $surnames
コンマ区切りの方法は、複数の配列要素にアクセスする場合にも当てはまります。たとえば、これを入力すると、$days$weekdaysに格納されます。
$weekdays = $days[0,1,2,3,4]
配列の反復処理
配列の特定の要素に手動でアクセスするのは良いことですが、配列の内容全体に対してアクションを実行したい場合は、面倒になる可能性があります。より洗練されたアプローチは、For ループを使用することです。
for ループは、命令に従って各値を処理しながら、配列のすべての要素を体系的に調べることができます。このようなループを構築する方法は次のとおりです。
For ($i = 0 ; $i -lt $days.Length ; $i++){
$days[$i]}
array.Length 関数は配列のサイズを返します。これは、基本的にその中の要素の数です。これを For ループのテスト式パラメーターにプラグインして、すべての要素を包括的に反復処理できます。
ForeachループとForeach -object ループは、さらに無駄のない PowerShell スクリプトで同じことを行うことができます(PowerShell)。
Foreach ($day in $days){
$day}
これにより、配列のサイズを決定する手間が省け、詳細はPowerShellに任せることができます。
PowerShell 配列(PowerShell Arrays)を使用する必要がある場合
複雑なスクリプトのバグの最大の原因は、誤って参照された変数です。これは、一意に名前が付けられた変数が多数存在するために発生し、それらの目的を思い出すのが難しくなります。
この問題を解決する最も簡単な方法は、配列を広範囲に使用することです。何らかの方法で関連付けられたすべての変数は、単一の配列に割り当てられ、インデックス番号を介してアクセスできます。
Microsoft PowerShell の(Microsoft PowerShell’s)主要なユース ケースは自動化であり、配列はその中で極めて重要な役割を果たします。PowerShellコマンドレットによって返されるオブジェクトは、配列に格納して反復処理できます。これにより、一連のタスクを自動的に実行できるようになり、システム管理が大幅に簡素化されます。
PowerShell Arrays: How to Create and Use Them
Variables are the most basic dаta strυcture in any type of coding. But single variables are hardly sufficient for most purposes, especially when dealing with more complex algorithms.
That’s where arrays come in. Be it C++ or Python, arrays are present in every programming language in some form. But what about Windows PowerShell? How do PowerShell arrays work? How do you use them? What is their syntax? Let’s find out.
PowerShell Arrays 101
Simply speaking, an array is just a structured collection of variables. The idea is to eliminate the hassle of keeping track of dozens of names by collapsing related variables into a numbered set.
In PowerShell, you can create a variable by prepending the $ symbol to a variable name. For example:
$prime = 13
The variable can contain any data type, from numbers to strings. You just need to use double or single quotes to specify a string.
$name = “Levin”
Now to create a new array, simply assign multiple values to the same variable, separated by commas. Like this:
$week = “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”
Some people prefer to explicitly cast a variable into an array to avoid confusion, though that isn’t necessary. To do this, put the values into parentheses prefaced with the @ symbol.
$week = @(“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”)
This usually comes in handy when trying to put the output of other commands into an array, where you cannot manually write them in the correct format.
Creating an Array
We’ve already seen the most common method of creating an array. But depending on the situation, there are other ways that might be more suitable. For example, if you want to create an array that contains a range of numbers, you can use the range operator:
$digits = (0..9)
This will create an array of all the ten digits from zero to nine. You can also initialize an empty array, in case you just want a place to store values later.
$values = @()
Multiple arrays can even be nested into one another, though this type of usage can get confusing very fast.
$coordinates = @(
(5, 10, 23),
(11, 7, 16)
)
By default an array can store any variable type, be it numbers, strings, or a mix of both. But you can explicitly define a type in case you want to limit the values put in it. For example:
[int[]] $numbers = 2,3,4,5
This way, the array can only hold integers. Attempting to assign any other type of value to it will return an error. This can be useful to prevent simple errors for arrays exclusively working with numeric values, since entering a string into a variable to be used in calculations will create issues.
Accessing Arrays
So far we have seen multiple methods for creating arrays containing various types of data. But how do you go about accessing this data?
PowerShell arrays use the same format used by other programming languages. Each array variable can be accessed by its index number. For example:
$var = $numbers[5]
This will copy the value stored in the index five of the $numbers array in the $var variable. Note that array indices start counting from 0, so the first item is accessed with zero.
If we were to output this, for example:
“$days[2]”
We will get Wednesday, not Tuesday.
You can use this same method to modify these values as well. For example, the following command will change the second element of the array to zero:
$numbers[1] = 0
You can also add more elements to an existing array instead of changing the values of current entries just by adding them like an arithmetic expression.
$names += “Johny”
This method can be used to add multiple entries at once too, or even entire arrays.
$names += “Charlie, Liam, Teresa”
$names += $surnames
The comma-separated method holds for accessing multiple array elements too. Entering this, for example, stores the first five elements of $days in $weekdays.
$weekdays = $days[0,1,2,3,4]
Iterating Through Arrays
Manually accessing particular elements of an array is well and good, but if you want to perform actions on the entire contents of an array, it can get tedious. A more elegant approach is to use a For loop.
For loops can systematically go through all the elements of an array, processing each value according to instructions. This is how you can construct such a loop:
For ($i = 0 ; $i -lt $days.Length ; $i++)
{
$days[$i]
}
The array.Length function returns the size of the array, which is basically the number of elements in it. This can be plugged into a For loop’s test expression parameter to comprehensively iterate over all the elements.
The Foreach loop and the Foreach-object loop can do the same with an even leaner PowerShell script.
Foreach ($day in $days)
{
$day
}
This saves you the effort of determining the array’s size, leaving the details for PowerShell to handle.
When Should You Use PowerShell Arrays
The biggest source of bugs in a complex script is incorrectly referenced variables. This happens due to the presence of a large number of uniquely named variables, which makes it difficult to remember their purpose.
The simplest fix for this issue is to use arrays extensively. All variables related in some manner can be assigned to a single array and accessed through their index numbers.
Microsoft PowerShell’s prime use case is automation, and arrays play a pivotal role in that. The objects returned by PowerShell cmdlets can be stored into arrays and iterated over. This allows sequential tasks to be performed automatically, greatly simplifying system administration.