PowerShellを使ってスクリプトを書く際、「配列の要素数」や「文字列の長さ」、「数値の合計」などを求めたい場面はよくあります。そんなときに便利なのが Measure-Object
コマンドです。このコマンドは、オブジェクトの件数(Count)、合計(Sum)、最大値(Maximum)、最小値(Minimum)、平均(Average)などを取得できる強力なツールです。この記事では、Measure-Object
コマンドの基本的な使い方から応用例まで、実際の使用シーンに沿ってわかりやすく解説していきます。PowerShell初心者の方にもやさしく説明しますので、ぜひ最後までご覧ください。
Measure-Objectとは?
Measure-Object
は、PowerShellで数値、文字列、配列などのオブジェクトに対して「統計的な情報」を取得するためのコマンドです。主に以下のような情報を取得できます。
- オブジェクトの数(Count)
- 数値の合計(Sum)
- 数値の最大値(Maximum)
- 数値の最小値(Minimum)
- 数値の平均(Average)
- 文字列の長さ(Characters)
このコマンドは、オブジェクトをパイプ(|
)で受け取り、その中身を解析する形で使います。
オブジェクトの数(件数)を取得する
まずは一番基本的な使い方から見てみましょう。以下のコマンドは、配列の中にいくつの要素があるかをカウントします。
1..10 | Measure-Object
このコマンドの出力結果:
Count : 10
Average :
Sum :
Maximum :
Minimum :
Property :
Count: 10
と表示され、1から10までの10個の要素があることがわかります。非常にシンプルですが、処理の前後で要素数をチェックしたいときなどに便利です。
数値の合計・最大・最小・平均を取得する
次に、数値の統計を取得する方法です。以下のように -Sum
、-Maximum
、-Minimum
、-Average
を使って、数値データに対する統計情報を取得します。
1..10 | Measure-Object -Sum -Maximum -Minimum -Average
出力結果:
Count : 10
Average : 5.5
Sum : 55
Maximum : 10
Minimum : 1
Property :
このように、数値の合計が 55
、平均が 5.5
、最大が 10
、最小が 1
と確認できます。
プロパティを指定して数値を集計する
オブジェクトの特定のプロパティに対して統計を取りたい場合は、-Property
パラメーターを使います。たとえば、以下のようなカスタムオブジェクトの配列があるとします。
$data = @(
[PSCustomObject]@{Name="商品A"; Price=100},
[PSCustomObject]@{Name="商品B"; Price=200},
[PSCustomObject]@{Name="商品C"; Price=150}
)
この中の Price
を合計したいときは以下のようにします。
$data | Measure-Object -Property Price -Sum
出力結果:
Count : 3
Average :
Sum : 450
Maximum :
Minimum :
Property : Price
このように、プロパティを指定すれば、構造化データに対しても柔軟に統計処理が可能です。
文字列の長さ(文字数)を取得する
文字列の文字数を取得したい場合は、-Character
パラメーターを使います。以下の例では、複数行の文字列から合計文字数を取得しています。
"PowerShell", "is", "fun" | Measure-Object -Character
出力結果:
Count : 3
Characters : 16
「PowerShell」(10文字)+「is」(2文字)+「fun」(3文字)で、合計15文字…と思いきや「Characters: 16」になっています。これは、改行や空白などの不可視文字も含まれる場合があるためです。
文字数の正確な取り扱いをしたい場合は、個別に .Length
を使って合算する方法もあります。
("PowerShell", "is", "fun" | ForEach-Object { $_.Length }) | Measure-Object -Sum
出力結果:
Count : 3
Sum : 15
これで純粋な文字列の長さ合計を取得できます。
ファイル数や行数のカウントに使う
Measure-Object
はファイル操作でも便利に使えます。たとえば、特定のディレクトリにあるファイル数を数えるには以下のようにします。
Get-ChildItem "C:\Test" | Measure-Object
テキストファイルの行数を知りたい場合は以下のようにします。
Get-Content "C:\Test\sample.txt" | Measure-Object
行数のみが Count
に出力されるため、ファイルのサイズや処理効率の確認にも使えます。
応用:複数条件の集計を行う
複雑な条件でフィルタした結果に対して集計を取りたいときにも Measure-Object
は役立ちます。
例えば、1000円以上の商品だけの合計価格を出したい場合:
$data = @(
[PSCustomObject]@{Name="A"; Price=500},
[PSCustomObject]@{Name="B"; Price=1200},
[PSCustomObject]@{Name="C"; Price=800},
[PSCustomObject]@{Name="D"; Price=2000}
)
$data | Where-Object { $_.Price -ge 1000 } | Measure-Object -Property Price -Sum
出力結果:
Count : 2
Sum : 3200
フィルタと組み合わせることで、より柔軟な分析が可能です。
よくある注意点と対処法
- Null値は無視される:対象のプロパティに
null
が含まれていると、カウントの対象から外れます。 - データ型の違い:数値であっても、文字列として渡すと合計や平均が出せません。必要に応じて
[int]
などでキャストしましょう。 - 平均値が表示されない:
-Average
オプションを使わないと表示されません。指定忘れに注意しましょう。
まとめ
Measure-Object
コマンドは、PowerShellにおいて数値、文字列、オブジェクトの集計を簡単に行うための非常に強力なツールです。配列の要素数を数える、文字列の長さを調べる、数値の合計や平均を求めるなど、さまざまな場面で活用できます。
特にデータの集計やログ処理、ファイル操作などの自動化スクリプトを書く際に大いに役立つコマンドです。今回ご紹介した基本的な使い方や応用例を参考に、ぜひ実務にも活用してみてください。PowerShellの効率がぐっとアップするはずです!