このページの本文へ

Windows Info 第497回

PowerShellの書式指定

2025年09月07日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

そもそも書式指定とは

 コンピュータのメモリ内では、すべて2進数で表現されており、そのビットパターンを見ただけでは、人間はデータとして把握することが難しい。

書式指定

 そこで、こうしたバイナリ値をデータサイズや形式に合わせて、人間が理解しやすいように表示することを「書式指定」という。コンピュータでは、同様の用語がいくつも使われる。たとえばワープロで、特定の文字を太文字にすることや、1ページに並べる行の桁数、文字フォントの指定なども「書式指定」と呼ばれることが少なくない。

 とりあえず、「書式指定」には、複数の用法があることを頭の片隅にでも置いておくと、混乱を減らすことができる。

 さて、コンピュータが扱うデータの大半は人間が見ることは難しい(ハードウェア・コンソールやデバッガーを使えば可能)。通常は、ソフトウェアがメモリ内容を読み出し、データ形式に合わせて適切な文字列に変換してCLIやGUIを使って表示する。

 データ形式は、メモリ内データの「メタ情報」であり、必ずしもメモリを見て、データ形式を判断できるわけではない(CPUのアーキテクチャによっては可能だが、x86/x64ではそうなっていない)。

 しかし、コンピュータ言語がデータとデータ形式を適切に管理しており、プログラム上は、データ形式が不明になることはない。ビット幅が同じデータであれば、強制的にデータ形式を指定する「キャスト」ができる言語もある。

 たとえば、符号付き32bit整数を符号なし32bit整数として解釈させるようなことだ。言語によっては、ビット幅の異なる形式でデータをアクセスしようとすれば、アクセス違反などのエラーを起こすこともできる。

 データ自体は、1bitから64bit、128bit、あるいはそれ以上のビットから構成される。データによっては、文字列のように長さが不定のデータ形式もある。また、基本的なデータ形式を複数組み合わせた、配列や構造体といったデータ形式も存在する。

 文字列は、そのまま、あるいは文字エンコードを変換して表示するだけでいいが、整数や小数点(浮動、固定)、日付などは、それぞれ一定のやりかたで表示文字列を作る必要がある。また、表示方法は、1つだけでなく、同じデータ形式(たとえば32bit整数)にも、さまざまな表現方法がある。たとえば、2進数、10進数、16進数といった形式、さらには、数値として表現するときに符号をどうするのか? 桁区切りをどうするかといった問題がある。

 コンピュータ特有の事情として、すべての表示は画面上で一定のサイズを専有し、位置や近隣に表示されるものなどによっては、正しく表示されたように人間には見えないことがある。

PowerShellで書式を設定する

 GUIプログラムの書式設定、たとえば、Excelの書式設定などに関しては、記事がインターネットにあふれているため、ここでは解説しない。CLIとしてPowerShellでの書式指定方法を解説する。なお、PowerShellの書式指定は、.NET Framework(Windows PowerShell)、.NET(PowerShell)で作られているため、基本的には、.NET/.NET Framework(以下、.NET)と同じ書式指定パターンを使う。

 PowerShell(Windows PowerShellを含む)で書式指定をするには、「書式指定演算子」である「-f」を使う。PowerShellでは、.NETの機能を利用できるため、その書式指定機能を使うこともできるが、PowerShell自体が持っている書式指定機能はこの「書式指定演算子」のみである。

 書式指定演算子は、以下の形式で使う

"<書式指定項目を含む文字列>" -f <オブジェクト配列>

 簡単に説明すると、-fの右側のオブジェクト要素を左側にある書式指定項目を使って、書式指定する。なお、-fの左側に記述される「書式指定項目」は、波カッコ(“{”……“”})で囲む必要があり、必ず文字列でなければならない。というのはPowerShellでは、波カッコはスクリプトブロックを表すからである。

 右側は、オブジェクトの配列で、PowerShellでは、以下の形式を使う。

@(オブジェクト0、オブジェクト1……)

となる。オブジェクトはリテラル(数値)や変数が利用できる。  書式指定項目は、以下の形式を持つ。

{index[,alignment][:formatString]}

 ここで、「index」は、-fの右側のオブジェクト位置を表し、0が一番左側(つまり、-fの直後。前記の形式の「オブジェクト0」に対応する)となる。

 次の「alignment」は、書式を適用したあとの桁数(文字数)と位置合わせ(右寄せ、左寄せ)を指定するもの。負数を指定すると左寄せ、正の数を指定すると右寄せとなる。

 最後の「formatString」は、オブジェクトの書式を指定する。このあたりに関しては、マイクロソフトのドキュメント「about_Operators」(https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-7.5#format-operator--f)に解説がある。

 対象となるオブジェクトは、数値(整数、小数、通貨など)、日付(DateTimeオブジェクト)、日付間隔(TimeSpan)である。基本的には数値が対象となる。

 また、書式指定文字に関しては、以下のページに記述がある。

・標準の数値書式指定https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/standard-numeric-format-strings
・カスタム数値書式指定https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-numeric-format-strings
・標準の日時書式指定https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/standard-date-and-time-format-strings
・カスタム日時形式https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings
・標準 TimeSpan 書式指定https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/standard-timespan-format-strings
・カスタム TimeSpan 書式指定https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-timespan-format-strings

 このうち「標準」とあるのは、あらかじめ定義されているよく使われる書式指定をアルファベット1文字などで表現できるようにしたもの。「カスタム」とあるのは数字桁や小数点位置、時分秒などの要素を表す書式指定文字を組み合わせて、書式パターンを作成するものだ。

 なお、「書式指定文字」を省略すると、オブジェクトに対して適当と思われる書式が選択される。同様にalignmentを省略すると、書式設定後の桁数が自動的に使われる。ただし、indexに関しては省略ができない。

 書式指定文字列では、すべてのオブジェクトをindexで参照する必要はなく、未参照のオブジェクトがあってもかまわないし、書式指定文字列内では、indexの順に並べなければならないという規則もない。

 なお、.NETのStringオブジェクトのFormatメソッドで同等の指定ができる。これは、PowerShell内からは、「[String]::Format」でアクセスできる。

 PowerShellには、Format-Tableや、Format-Listといった書式と表示パターンを組み合わせたコマンドがあるが、オブジェクトの書式指定ができない。こうした場合、書式指定演算子を使い、ユーザーが必要な書式を設定することが可能。なお、パイプラインの最終段で書式指定をする場合、パイプ出力をForeach-Objectで受け、$_または$PSItemでプロパティを取り出して書式設定する。

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン