🧮

PowerShellのわかりにくい比較演算子を記号で判定可能にするFunction

2024/06/14に公開

こちらでアルファベット2文字の比較演算子である「 -eq / -ne / -lt / -le / -gt / -ge 」について解説しました。

そのままPowerShellで使用してもよいのですが、やはり記号の比較演算子「 == / != / < / <= / > / >= 」の方がわかりやすいなと感じます。

需要があるかわかりませんが、記号の比較演算子でもif判定できるFunctionを自作したので紹介。

記号の比較演算子で比較ができるFunciton

下記が記号の比較演算子「 == / != / < / <= / > / >= 」で確認できるFunction「Test-Comparison」です。

この記号の比較演算子は、文字列の引数でFunctionに渡す必要がある為、シングルクォーテーション(') や ダブルクォーテーション(")で記号を囲む必要があります。

コメントアウトしていますが、PowerShellには記号で表現できない比較演算子もいくつか存在します。
それらの比較演算子を使用したい場合は、該当のコメント行を解除して使用してください。

記号の比較演算子で比較ができるFunciton
function Test-Comparison {
    param(
        [Parameter(Mandatory=$true)][System.Object]$Value1,

        [Parameter(Mandatory=$true)]
        [System.String]$Operator,

        [Parameter(Mandatory=$true)]
        [System.Object]$Value2
    )

    switch ($Operator) {
        # 通常の比較演算子
        '=='            { return $Value1 -eq $Value2 }
        '!='            { return $Value1 -ne $Value2 }
        '<'             { return $Value1 -lt $Value2 }
        '<='            { return $Value1 -le $Value2 }
        '>'             { return $Value1 -gt $Value2 }
        '>='            { return $Value1 -ge $Value2 }
        # # その他の記号で表せない比較演算子
        # '-like'         { return $Value1 -like $Value2 }
        # '-notlike'      { return $Value1 -notlike $Value2 }
        # '-match'        { return $Value1 -match $Value2 }
        # '-notmatch'     { return $Value1 -notmatch $Value2 }
        # '-contains'     { return $Value1 -contains $Value2 }
        # '-notcontains'  { return $Value1 -notcontains $Value2 }
        # '-in'           { return $Value1 -in $Value2 }
        # '-notin'        { return $Value1 -notin $Value2 }
        # '-is'           { return $Value1 -is $Value2 }
        # '-isnot'        { return $Value1 -isnot $Value2 }
        # # 上記にある比較演算子で大文字と小文字を区別する場合
        # '-ceq'          { return $Value1 -ceq $Value2 }
        # '-cne'          { return $Value1 -cne $Value2 }
        # '-cgt'          { return $Value1 -cgt $Value2 }
        # '-cge'          { return $Value1 -cge $Value2 }
        # '-clt'          { return $Value1 -clt $Value2 }
        # '-cle'          { return $Value1 -cle $Value2 }
        # '-clike'        { return $Value1 -clike $Value2 }
        # '-cnotlike'     { return $Value1 -cnotlike $Value2 }
        # '-cmatch'       { return $Value1 -cmatch $Value2 }
        # '-cnotmatch'    { return $Value1 -cnotmatch $Value2 }
        # '-ccontains'    { return $Value1 -ccontains $Value2 }
        # '-cnotcontains' { return $Value1 -cnotcontains $Value2 }
        # '-cin'          { return $Value1 -cin $Value2 }
        # '-cnotin'       { return $Value1 -cnotin $Value2 }
        default         { throw "Invalid operator: $Operator" }
    }
}
コピー用
# 例: 10 と 20 を比較して、10 が 20 より小さいかどうかを判定
$standardValue = 10
$comparedValue = 20

# そのまま実行
Write-Host '--- そのままFunctionを実行した結果 ---'
Test-Comparison -Value1 $standardValue -Operator '<' -Value2 $comparedValue
Write-Host ''

# if文で実行
Write-Host '--- if文でFunctionを実行した結果 ---'
if (Test-Comparison $standardValue '<' $comparedValue) {
    Write-Host "True判定:$standardValue$comparedValue より小さい"
    Write-Host ''
}
else {
    Write-Host "False判定:$comparedValue$comparedValue より小さくない"
    Write-Host ''
}
実際に実行した結果
PS C:\Users\"ユーザー名"> # 例: 10 と 20 を比較して、10 が 20 より小さいかどうかを判定
>> $standardValue = 10
>> $comparedValue = 20
>>
>> # そのまま実行
>> Write-Host '--- そのままFunctionを実行した結果 ---'
>> Test-Comparison -Value1 $standardValue -Operator '<' -Value2 $comparedValue
>> Write-Host ''
>>
>> # if文で実行
>> Write-Host '--- if文でFunctionを実行した結果 ---'
>> if (Test-Comparison $standardValue '<' $comparedValue) {
>>     Write-Host "True判定:$standardValue$comparedValue より小さい"
>>     Write-Host ''
>> }
>> else {
>>     Write-Host "False判定:$comparedValue$comparedValue より小さくない"
>>     Write-Host ''
>> }
--- そのままFunctionを実行した結果 ---
True

--- if文でFunctionを実行した結果 ---
True判定:10 は 20 より小さい

PS C:\Users\"ユーザー名">

参考記事

https://haretokidoki-blog.com/pasocon_2char-comparison-operators/

まとめ

  • 実用性があるか不明だが比較的わかりやすい記号の比較演算子で判定できる自作Functionを作成できた

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion