PowerShellはWindows管理者やITプロフェッショナルにとって強力なツールですが、その中でも配列(Array)は非常に重要なデータ構造です。
配列を理解し、効果的に操作できることは、日常的なタスクの効率化やスクリプトの柔軟性を向上させるために必須です。
この記事では、PowerShellの配列について基本的な概念から実践的な操作方法まで、段階を追って解説します。
また、学んだ知識を確認するための演習問題とその解答例も提供しますので、ぜひ挑戦してみてください。
配列の基本
配列とは?
配列は、複数の値を一つの変数に格納できるデータ構造です。
これにより、データをまとめて管理し、操作することが容易になります。
配列の作成方法
PowerShellでは、配列を作成するのは非常に簡単です。
以下の例のように、複数の要素をカンマで区切り、@()で囲むことで配列を作成できます。
# 空の配列を作成
$array = @()
# 値を持つ配列を作成
$array = @(1, 2, 3, 4, 5)
配列の要素にアクセスする方法
配列の特定の要素にアクセスするには、インデックスを使用します。
インデックスは0から始まるため、最初の要素はインデックス0で指定します。
# 1番目の要素にアクセス
$array[0] # 結果: 1
# 3番目の要素にアクセス
$array[2] # 結果: 3
配列のサイズを確認する
配列のサイズ、すなわち要素の数は.
Lengthプロパティを使って取得できます。
$array.Length # 結果: 5
配列の操作
配列への要素の追加
PowerShellの配列は基本的にサイズが固定されていますが、配列の要素を追加するには+=演算子を使います。
$array += 6 # 配列に6を追加
$array # 結果: 1, 2, 3, 4, 5, 6
配列の要素を削除する
特定の要素を削除するためには、Where-Objectコマンドレットを使う方法が一般的です。
# 3を持つ要素を削除
$array = $array | Where-Object { $_ -ne 3 }
$array # 結果: 1, 2, 4, 5, 6
配列のフィルタリング
配列の中から特定の条件に合致する要素を抽出することもよく行います。
例えば、2以上の要素のみを取り出す場合には、以下のようにします。
$filteredArray = $array | Where-Object { $_ -ge 2 }
$filteredArray # 結果: 2, 4, 5, 6
配列の要素をループで操作
配列のすべての要素に対して何らかの操作を行うには、foreachループが便利です。
foreach ($item in $array) {
Write-Output "現在の要素は: $item"
}
配列の応用テクニック
多次元配列の作成
PowerShellでは、配列の中に配列を格納することで多次元配列を作成することも可能です。
これを使うと、テーブル状のデータを扱うことができます。
$multiArray = @(
@(1, 2, 3),
@(4, 5, 6),
@(7, 8, 9)
)
# 2次元配列の要素にアクセスする
$multiArray[1][2] # 結果: 6
配列をソートする
配列を昇順または降順に並べ替えるには、Sort-Objectコマンドレットを使用します。
# 昇順にソート
$sortedArray = $array | Sort-Object
$sortedArray # 結果: 1, 2, 4, 5, 6
# 降順にソート
$sortedArrayDesc = $array | Sort-Object -Descending
$sortedArrayDesc # 結果: 6, 5, 4, 2, 1
配列内の重複を削除
配列内に重複する要素が含まれている場合、それを削除してユニークな要素だけを保持することができます。
$duplicateArray = @(1, 2, 2, 3, 4, 4, 5)
$uniqueArray = $duplicateArray | Select-Object -Unique
$uniqueArray # 結果: 1, 2, 3, 4, 5
配列の変換と操作
配列を文字列に変換
配列の要素を結合して1つの文字列にすることができます。これは、-join演算子を使用します。
$array = @(1, 2, 3, 4, 5)
$joinedString = -join $array # 結果: "12345"
# カンマ区切りで結合
$commaString = -join ($array -join ',') # 結果: "1,2,3,4,5"
文字列を配列に変換
逆に、文字列を配列に分割することも可能です。これは、-split演算子を使います。
$string = "1,2,3,4,5"
$array = $string -split ','
$array # 結果: 1, 2, 3, 4, 5
配列を使った実践的な例
例1: 配列内のファイル名を一括で処理する
ファイル名を格納した配列を使って、一括で処理を行うスクリプトです。
$files = @("file1.txt", "file2.txt", "file3.txt")
foreach ($file in $files) {
Write-Output "処理中のファイル: $file"
}
例2: 配列を使った計算
配列内の数値の合計や平均を計算するスクリプトです。
$numbers = @(10, 20, 30, 40, 50)
# 合計
$sum = ($numbers | Measure-Object -Sum).Sum
Write-Output "合計は: $sum"
# 平均
$average = ($numbers | Measure-Object -Average).Average
Write-Output "平均は: $average"
演習問題
問題1: 配列の操作
以下の配列を使用して、次の操作を行ってください。
$array = @(7, 2, 9, 3, 6, 4, 8)
- 配列のすべての要素を昇順にソートしてください。
- 配列から偶数の要素のみを抽出してください。
- 配列の要素を逆順に並べ替えてください。
解答例
$array = @(7, 2, 9, 3, 6, 4, 8
)
# 1. 昇順にソート
$sortedArray = $array | Sort-Object
Write-Output "昇順にソート: $sortedArray"
# 2. 偶数の要素を抽出
$evenNumbers = $array | Where-Object { $_ % 2 -eq 0 }
Write-Output "偶数のみ: $evenNumbers"
# 3. 逆順に並べ替え
$reversedArray = $array | Sort-Object -Descending
Write-Output "逆順に並べ替え: $reversedArray"
問題2: 配列の応用
以下のコードを使って、次の要件を満たすスクリプトを作成してください。
$names = @("Alice", "Bob", "Charlie", "David", "Eve")
$scores = @(85, 92, 78, 88, 95)
- 各名前と対応するスコアを結びつけて、次の形式で表示してください: Name: Alice, Score: 85
- スコアが90以上の人だけを抽出し、名前を表示してください。
解答例
$names = @("Alice", "Bob", "Charlie", "David", "Eve")
$scores = @(85, 92, 78, 88, 95)
# 1. 名前とスコアを表示
for ($i = 0; $i -lt $names.Length; $i++) {
Write-Output "Name: $($names[$i]), Score: $($scores[$i])"
}
# 2. スコアが90以上の人を表示
for ($i = 0; $i -lt $scores.Length; $i++) {
if ($scores[$i] -ge 90) {
Write-Output "90点以上: $($names[$i])"
}
}
以上で、PowerShellの配列操作についての基本的な内容から応用まで解説しました。
配列を効果的に操作することで、スクリプトの柔軟性と効率性を大幅に向上させることができます。