PowerShellのNot Equal演算子の学習と例

PowerShell は、コマンドラインツールであるだけでなく、Microsoft のプログラミング言語でもあり、システムを制御および自動化することができます。PowerShell は、その演算子について、ほとんどのプログラミング言語とは異なる構文を使用しています。

しかし、PowerShell の演算子構文を理解すると、使用は難しくありません。PowerShell でよく使用される演算子の1つは、Not Equal 演算子 (-ne) です。この演算子を使用すると、2つの値が等しくないかどうかをテストできます。

この記事では、PowerShell の Not Equal 演算子とその使用方法について学びます。

前提条件

このチュートリアルは実演形式です。一緒に進めたい場合は、PowerShell がインストールされたシステムを準備してください。このチュートリアルでは、Windows 10 と PowerShell 7 を使用します。

PowerShell の Not Equal 演算子の使用方法 (基本)

要するに、PowerShell の Not Equal 演算子 (-ne) は、2つのオブジェクトの値が等しくないかどうかを判定し、その結果に基づいてブール値を返します。値が等しくない場合、結果は True になります。それ以外の場合は False になります。

では、どのようにして、いつ PowerShell の Not Equal 演算子を使用するのでしょうか?次のセクションでは、PowerShell の Not Equal の基本を学びます。

変数の比較

PowerShellのNot Equal演算子の最も一般的な使用法の1つは、2つの変数を比較することです。例えば、2つの変数、$a$bがあるとします。これらが等しいかどうかを確認したい場合、比較の構文は以下の通りです:

$a -ne $b

$a$bの値が等しくない場合、この比較はTrueを返します。そうでなければ、Falseを返します。

1. PowerShellコンソールで以下のコマンドを実行して、例として使用する変数を作成します。変数$a、$b、$c、$dは異なる値を表しています。これらの値を比較して、等しいかどうかをテストすることができます。

$cと$dに同じ値を割り当てて、PowerShellのNot Equal演算子が等しい値とどのように動作するかを確認します。

$a = 1
$b = 2
$c = 3
$d = 3

2. さて、PowerShellのNot Equal比較を実行して、$aと$bの値が等しくないかどうかを確認します。

$a -ne $b

結果はTrueを返します。なぜなら、$aの値は1であり、$bの値は2であり、これらは等しくないからです。

You will see a False output return, as shown in the image below, since the values of $c and $d are equal (3=3). variables with not equal values

3. 今度は$cと$dの変数を比較して、それらが等しくないかどうかを確認します。

$c -ne $d

下の画像のように、$cと$dの値が等しい(3=3)ので、Falseが返されます。

Comparing variables with equal values

値の比較

PowerShellを使用して作業する場合、比較したいオブジェクトがすべて変数に格納されているわけではありません。この場合、PowerShellのNot Equal演算子を使用して値を直接比較することができます。

例えば、以下のコマンドは、PowerShellのNot Equal演算子を使用して2つの値を直接比較します。

5 -ne 3

値が等しくないため、下のようにTrueの値が返されます。

Comparing different values using the PowerShell not equal operator

それに対して、等しい値を比較するとFalseが返されます。

5 -ne 5
Comparing equal values using the PowerShell not equal operator

配列から値を削除する

PowerShell Not Equal 演算子は、2つの値が等しくないかどうかを示すブール値を返します。この演算子は、その機能以外にも配列からアイテムをフィルタリングすることもできます。

たとえば、数値1から5までの配列を含む変数$numbersを作成します。

# 数字1から5までを含む配列を作成します。
$numbers = 1..5
# 配列を表示
$numbers
Storing an array

次に、以下のコマンドを実行して、1つの数値(4)を除いた配列を返します。

$numbers -ne 4

そして、このコマンドが配列内の数値4を除くすべての数値を返すことがわかります。

Filtering an array

文字列の比較

数字に加えて、PowerShell Not Equal 比較を文字列に適用することもできます。

1. 例えば、「Hello」と「World」という2つの文字列があるとします。2つの文字列が等しくないかどうかを判断するには、以下のコマンドを実行します。

"Hello" -ne "World"

結果は、「Hello」と「World」が等しくないので、Trueになります。

Comparing unequal stings

2. 次に、文字列「Hello」と「hello」を比較して、等しいかどうかを確認します。

"Hello" -ne "hello"

その結果、”Hello”は”hello”と等しいため、Falseになります。

Comparing two strings

3. PowerShellのNot Equal演算子は大文字と小文字を区別しません。前のステップで見たように、「Hello」と「hello」は等しいです。しかし、文字列の値を比較する際に大文字と小文字を区別する必要がある場合は、-ne演算子を-cne演算子で置き換えます。これは大文字と小文字を区別するNot Equalを意味します。

"Hello" -cne "hello"

その結果、「Hello」と「hello」はPowerShellによればもはや等しくありません。

“Hello” and “hello”

実際の使用例でPowerShellのNot Equal演算子を使用する(例)

基本的な概念が理解できたので、以下のセクションではその実世界での使用例をいくつか紹介します。

サービスの状態の監視

A staple of Windows systems administration is monitoring the server service status. This task involves filtering out which services whose Status Is Not Running.

例えば、Get-Serviceコマンドレットを実行して、ローカルマシン上のすべてのサービスを表示します。

Get-Service

以下の出力には、すべての停止および実行中のサービスが表示されます。

Display all services

次に、フィルタしてRunningでないサービスのみを表示するには、以下のコマンドを実行し、-ne演算子を適用します。

Get-Service | Where-Object {$_.Status -ne "Running"}

以下のように、PowerShellのNot Equal比較を適用した結果、Status列には停止しているサービスのみが表示されます。

Filtering non-running services

同様に、Status Is Not Stoppedのサービスを返すには、以下のコマンドを実行します。

Get-Service | Where-Object {$_.Status -ne "Stopped"}

今回は、実行中のサービスのみが表示されます。

Showing all running services

PowerShellのNot EqualをAND演算子と組み合わせる

1:1の比較に加えて、PowerShellのNot Equal条件を-eq(等しい)などの他の比較演算子と組み合わせることができます。-and演算子を使用します。オブジェクトを複数の条件に合致させる必要がある場合にこの方法が役立ちます。

たとえば、サーバーサービスの監視では、すべての自動サービスが実行されていることを確認することが一般的です。以下のコマンドを実行して、Status Is Not RunningかつStartType Is Automaticのすべてのサービスをリストアップします。この例では、オブジェクトの値がすべての条件に一致する必要があります。

Get-Service | 
Where-Object {$_.Status -ne "Running" -and $_.StartType -eq "Automatic"} |
Select-Object Status,StartType,Name

これで実行されていない自動サービスが表示されるようになり、どのアクションを実行する必要があるかを判断できます。

PowerShell Not Equal match all conditions

If/Else条件ロジックの追加

また、if/else文などの条件文の中でPowerShellのNot Equal演算子を使用することもできます。

たとえば、ほとんどの場合、StartType値がAutomaticであればサービスが実行されている必要があります。以下のスクリプトはすべてのサービスを取得し、実行されていない自動サービスをチェックし、修正アクション(メッセージの表示とサービスの開始)を実行します。

注: Start-Service $_.Nameの行はコメントアウトされており、実行されません。この行を実行したい場合は、コメントを解除してください。

以下のコードをコピーしてPowerShellで実行してください。

Get-Service -ErrorAction SilentlyContinue | ForEach-Object {
    if ($_.Status -ne 'Running' -and $_.StartType -eq 'Automatic') {
        "The service [$($_.Name)] StartType is [$($_.StartType)] but its current Status is [$($_.Status)]"
        # Start-Service $_.Name
    }
}

結果では、自動サービスが実行されていないものが表示されます。

Using PowerShell Not Equal in Conditional Logic

結論

この記事では、PowerShellの「等しくない」演算子について学びました。また、例を示しながらその使い方も学びました。これで、その動作が理解できるはずです。

この新たに得た知識を活用して、PowerShellスクリプトで「等しくない」演算子を使用して条件をテストできます。ただし、他の比較演算子も利用できますので、より複雑な条件をテストするために複数の演算子を組み合わせることも考えられます。

Source:
https://adamtheautomator.com/powershell-not-equal/