HOWTO · PowerShell

二つの文字列オブジェクトの内容を PowerShell で比較する方法

この記事では、PowerShell における 2つの文字列オブジェクトの内容を比較するためのいくつかのアプローチを探ります。これは、-eq や-ne のような演算子を使用した基本的な等号および不等号チェックから、メソッド Equals()を使用したより高度な技術にまで及びます。

このページの内容

PowerShell で文字列を調べる方法には、大きく分けて2種類あります。値どうしの比較には -eq または -ne を使い、ワイルドカードパターンとの照合には -like を使います。比較演算子は既定で大文字と小文字を区別しません。大小文字を一致させる必要がある場合は、c を付けた -ceq または -cne を使います。文字列の Equals() メソッドでも、大文字と小文字を区別して値を比較できます。

PowerShell の文字列比較方法を選ぶ

答えたい問いに応じて演算子を選びます。

  • 2つの値が等しいかを調べるには -eq、異なるかを調べるには -ne を使います。どちらも既定では大文字と小文字を区別しません。
  • 大文字と小文字を別の文字として扱う等価・不等価の判定には、-ceq と -cne を使います。
  • 右辺に、任意の文字列を表す * などのワイルドカード構文が含まれる場合は、-like を使います。これはパターンを照合するもので、2つの文字列をリテラル値として比較するものではありません。
  • インスタンスメソッドの呼び出しがコードに適しており、大文字と小文字を区別して値を比較したい場合は、Equals() を使います。

これらの演算子は、2つのスカラー文字列に対して Boolean 値を返します。意図が明確になるよう、-like の右辺にパターンを指定してください。

-eq と -ne で文字列の等価・不等価を調べる

次の例を実行します。コード内の表示ラベルと出力は英語のままです。

$first = "PowerShell"
$second = "PowerShell"

$isEqual = $first -eq $second
$isDifferent = $first -ne $second

Write-Host "Equal: $isEqual"
Write-Host "Unequal: $isDifferent"

この例では、提供された実行結果として Equal: True と Unequal: False が出力されています。示されている2つの値は同じなので、-eq は等価判定を、-ne はその逆の判定を表します。通常の PowerShell の文字列比較では、これらの演算子は大文字と小文字を区別しません。たとえば、"PowerShell" -eq "powershell" は true になります。この既定の動作が適さない場合は、次の大小文字を区別する演算子を使ってください。

-ceq と -cne で大小文字を区別して等価・不等価を調べる

演算子の先頭にある c は、比較で大文字と小文字を区別することを示します。たとえば、"PowerShell" -ceq "powershell" は文字の大小が異なるため false になり、"PowerShell" -cne "powershell" は true になります。同じ文字だけでなく大小文字も一致させるには -ceq を使います。大小文字の違いを不一致として扱うには -cne を使います。

大小文字が重要な識別子やトークンには、大小文字を区別する形式が役立ちます。値を検証する場所では比較ルールを統一してください。そうしないと、あるチェックでは受け入れられる表記が、スクリプトの別の部分では異なる値として扱われる可能性があります。

-like でワイルドカードパターンを照合する

-like は、対象の文字列がワイルドカードパターンに一致するかを調べます。ワイルドカード * は文字が0個以上続く部分に一致し、? は任意の1文字に一致します。たとえば、"report-2026.csv" -like "report-*.csv" は一致しますが、"report-2026.txt" -like "report-*.csv" は一致しません。これはパターン照合であり、リテラル値の等価比較ではありません。

-eq と同様に、-like も既定では大文字と小文字を区別しません。パターン照合で大小文字を区別するには -clike を使います。入力をリテラル値と比較する場合は、代わりに -eq または -ceq を使ってください。-like のパターンでは、ワイルドカード文字に特別な意味があります。

Equals() で文字列の値を比較する

最初の文字列に対して Equals() を呼び出し、2つ目の文字列を引数として渡します。書式は $first.Equals($second) です。文字列では、このメソッドは大文字と小文字を区別して値を比較するため、"PowerShell".Equals("powershell") は false になります。ワイルドカード文字は解釈されません。たとえば、アスタリスクは引数内のリテラル文字として扱われるため、"report-2026.csv".Equals("report-*.csv") は false になります。

単純な Boolean 判定では、Equals() と -ceq のどちらも、大文字と小文字を区別する等価比較を表せます。条件を読みやすくできる場合は比較演算子を使い、周囲のコードにメソッド呼び出しが合う場合はメソッドを使います。パターン照合が目的の場合に限り、-like を使ってください。