PowerShellでスクリプトを組んでいると、配列を使ってデータをまとめる場面がよくあります。そんなときに「この配列に今、何個データが入っているんだろう?」と思うことはありませんか?
この記事では、PowerShellで配列の要素数(件数)を確認する方法 を、初心者の方にもわかりやすく紹介します。よくある間違いや注意点もあわせて解説しますので、ぜひ最後まで読んでみてください。
PowerShellの配列とは?まずは基本をおさらい

配列の基本概念
PowerShellの配列は、複数の値(要素)を一つの変数で管理できる便利なしくみです。データをまとめて扱えるので、同じ処理を一度に複数のデータに適用するときに欠かせません。
配列を使うことで、以下のようなメリットがあります:
- 関連するデータをひとまとめにできる
- 繰り返し処理で効率的にデータを扱える
- メモリの使用量を最適化できる
配列の作成方法
数値の配列
$numbers = 10,20,30
文字列の配列
$names = "Alice","Bob","Charlie"
混在した配列
$mixed = "apple",100,"banana",200
配列の内容を確認
作成した配列の中身を確認するには:
$names = "Alice","Bob","Charlie"
Write-Output $names
実行結果:
Alice
Bob
Charlie
配列の用途
実際のスクリプトでは、以下のような場面で配列がよく使われます:
- ファイルの一覧を取得して処理する
- ユーザーの入力を複数まとめて管理する
- 設定値を一括で管理する
- 計算結果を蓄積する
このようにPowerShellでは簡単に配列を作れます。では、この配列に「いくつ値が入っているのか」を確認するにはどうするのでしょうか?次で見ていきます。
配列の要素数を確認する基本方法
.Lengthプロパティとは
PowerShellで配列の要素数を調べたいときは、.Length
というプロパティを使います。これは配列の「長さ」、つまり要素の数を返してくれるものです。
すべての配列には、このプロパティが自動的に付いているので、特別な設定は必要ありません。
基本的な使い方
文字列の配列の場合
$items = "apple","banana","cherry"
$count = $items.Length
Write-Output "配列の要素数は $count です"
実行結果:
配列の要素数は 3 です
数値の配列の場合
$scores = 85,92,78,96,88
Write-Output "テストの点数は $($scores.Length) 個あります"
実行結果:
テストの点数は 5 個あります
直接表示する方法
変数に代入せずに、直接要素数を表示することもできます:
("red","green","blue").Length
実行結果:
3
Countプロパティとの違い
PowerShellでは .Length
のほかに .Count
というプロパティも使えます:
$items = "apple","banana","cherry"
Write-Output "Length: $($items.Length)"
Write-Output "Count: $($items.Count)"
実行結果:
Length: 3
Count: 3
通常は同じ結果になりますが、.Length
の方が一般的によく使われます。
とても簡単に要素数が確認できますね。ただし、PowerShellにはちょっとした落とし穴があります。次はそれを紹介します。
要素数を調べるときに注意するポイント
単一要素の問題
配列を作るときに、1つしか要素がない場合に注意が必要です。PowerShellでは、単一の値を代入したとき、配列として認識されない場合があります。
問題のある例
$oneItem = "apple"
Write-Output $oneItem.Length
この場合、"apple"
は文字列として扱われるので、.Length
は文字数を返します:
実行結果:
5
「apple」という文字列の文字数(5文字)が返されてしまいます。
正しい配列の作り方
最初から配列として扱いたい場合は @()
を使います:
$oneItem = @("apple")
Write-Output $oneItem.Length
実行結果:
1
今度は正しく要素数が表示されます。
空の配列の場合
空の配列を作る場合も @()
を使います:
$emptyArray = @()
Write-Output "空の配列の要素数: $($emptyArray.Length)"
実行結果:
空の配列の要素数: 0
nullや未定義の変数
変数が未定義やnullの場合の動作も確認しておきましょう:
$undefinedVar = $null
if ($undefinedVar -eq $null) {
Write-Output "変数は未定義です"
} else {
Write-Output "要素数: $($undefinedVar.Length)"
}
実践的な確認方法
配列かどうかを確認してから要素数を調べる安全な方法:
$data = "apple","banana"
if ($data -is [array]) {
Write-Output "配列です。要素数: $($data.Length)"
} else {
Write-Output "配列ではありません"
}
このように、1つの値でも配列にしたいときは @()
を使うのがポイントです。最後に、要素数を確認して処理を分ける例を紹介します。
要素数を使って条件分岐する実例

基本的な条件分岐
スクリプトの中で「要素数が0だったら何もしない」「3以上ならメッセージを出す」といった条件分岐をよく使います。
ファイル数による処理の分岐
$files = Get-ChildItem -Path "C:\Temp" -ErrorAction SilentlyContinue
if ($files.Length -eq 0) {
Write-Output "ファイルが見つかりませんでした。"
} elseif ($files.Length -ge 3) {
Write-Output "ファイルが3つ以上あります。($($files.Length)個)"
} else {
Write-Output "ファイルは $($files.Length) 個あります。"
}
処理対象の数による制御
$users = "太郎","花子","次郎","三郎","四郎"
if ($users.Length -gt 10) {
Write-Output "ユーザー数が多すぎます。処理を中止します。"
return
}
Write-Output "$($users.Length) 人のユーザーを処理します。"
foreach ($user in $users) {
Write-Output "処理中: $user"
}
配列の要素数による最適化
要素数に応じて処理方法を変える例:
$data = 1..1000 # 1から1000までの数値配列
if ($data.Length -lt 100) {
Write-Output "少ないデータなので通常処理します"
# 通常の処理
} else {
Write-Output "大量データなので高速処理モードを使います"
# 最適化された処理
}
エラーハンドリングでの活用
配列の要素数をチェックしてエラーを防ぐ例:
function ProcessArray {
param($InputArray)
# 配列が空でないかチェック
if ($InputArray.Length -eq 0) {
Write-Warning "処理対象の配列が空です"
return
}
Write-Output "$($InputArray.Length) 個の要素を処理します"
# 実際の処理
for ($i = 0; $i -lt $InputArray.Length; $i++) {
Write-Output "[$i] $($InputArray[$i])"
}
}
# 使用例
$testData = "A","B","C"
ProcessArray $testData
進捗表示での活用
配列の要素数を使って進捗を表示する例:
$tasks = "タスク1","タスク2","タスク3","タスク4","タスク5"
$totalTasks = $tasks.Length
for ($i = 0; $i -lt $tasks.Length; $i++) {
$progress = [math]::Round(($i + 1) / $totalTasks * 100, 1)
Write-Output "進捗: $progress% - $($tasks[$i]) を実行中..."
# 何らかの処理
Start-Sleep -Seconds 1
}
Write-Output "全 $totalTasks 個のタスクが完了しました!"
.Length
を使えば配列の要素数を自在に扱えるので、スクリプトをより賢く動かすことができます。
よくある疑問と応用例
Q. 配列の中で条件に合う要素だけを数えたい
Where-Objectを使った方法
$numbers = 1,5,10,15,20,25,30
$greaterThan10 = ($numbers | Where-Object { $_ -gt 10 }).Length
Write-Output "10より大きい数値は $greaterThan10 個です"
直接カウントする方法
$numbers = 1,5,10,15,20,25,30
$count = ($numbers | Where-Object { $_ -gt 10 } | Measure-Object).Count
Write-Output "10より大きい数値は $count 個です"
Q. 多次元配列の要素数はどうなる?
$matrix = @(
@(1,2,3),
@(4,5,6),
@(7,8,9)
)
Write-Output "外側の配列の要素数: $($matrix.Length)" # 3
Write-Output "最初の行の要素数: $($matrix[0].Length)" # 3
Q. 文字列の配列と文字列の違いを確実に判定したい
function GetElementCount {
param($InputData)
if ($InputData -is [array]) {
return $InputData.Length
} elseif ($InputData -is [string]) {
return "文字列です(文字数: $($InputData.Length))"
} else {
return "未知の型です"
}
}
# テスト
Write-Output (GetElementCount @("apple","banana")) # 2
Write-Output (GetElementCount "apple") # 文字列です(文字数: 5)
Q. 大きな配列の要素数を効率的に取得したい
PowerShellの .Length
プロパティは非常に高速で、配列のサイズに関係なく一定時間で結果を返します:
# 大きな配列でもすぐに要素数が分かる
$bigArray = 1..1000000
Measure-Command { $count = $bigArray.Length }
Write-Output "要素数: $count"
まとめ
PowerShellで配列の要素数を確認するときは .Length
を使うのが基本です。重要なポイントをまとめると:
基本的な使い方
$array.Length
で要素数を取得- 条件分岐や繰り返し処理で活用
注意すべきポイント
- 単一要素の場合は
@()
をつけて配列化 - 空の配列も
@()
で作成 - 文字列との違いに注意
実践的な活用
- 要素数による条件分岐
- 進捗表示での活用
- エラーハンドリングでの事前チェック
コメント