PowerShell で 2つのオブジェクトが同一かどうかを判断する

Rohan Timalsina 2023年1月30日
  1. PowerShell で Compare-Object コマンドレットを使用して 2つの文字列を比較する
  2. PowerShell で Compare-Object コマンドレットを使用して PSCustomObject を比較する
  3. PowerShell で Compare-Object コマンドレットを使用してソースファイルと宛先ファイルを比較する
  4. PowerShell で Compare-Object コマンドレットを使用してファイルのプロパティを比較する
PowerShell で 2つのオブジェクトが同一かどうかを判断する

2つのオブジェクトを比較して、それらが同一であるかどうかを判断するのが難しい場合がありますが、PowerShell を使用すると簡単に実行できます。オブジェクトは、文字列、ファイル、ファイルまたは変数のコンテンツ、プロセスなど、さまざまなタイプにすることができます。

Compare-Object コマンドレットを使用して、PowerShell の 2 セットのオブジェクトを比較できます。このチュートリアルは、2つのオブジェクトを比較し、PowerShell を使用してそれらが同一であるかどうかを判断するのに役立ちます。

PowerShell で Compare-Object コマンドレットを使用して 2つの文字列を比較する

Compare-Object を使用して、2つの文字列の違いを判別できます。

始める前に、Compare-Object コマンドレットが 2つのオブジェクトの違いを示すために使用するサイドインジケーターについて理解しましょう。

Side Indicators      Meaning
==                   It indicates both the source and destination objects are equal or contain the same values.
=>                   It indicates that the destination object is different or the content only exists on the destination object.
<=                   It indicates that the source object is different or the content only exists on the source object.

次のコマンドは、2つの異なる文字列の比較の例です。

Compare-Object "Apple" "Mango"

出力:

InputObject SideIndicator
----------- -------------
Mango       =>
Apple       <=

上記の出力は、両方の文字列が異なることを示しています。文字列 Mango は、ソースオブジェクトとは異なることを意味する右側のインジケーターを示し、文字列 Apple は、宛先オブジェクトとは異なることを意味する左側のインジケーターを示します。

ただし、2つの文字列が等しい場合、-IncludeEqual パラメーターを指定しない限り、コマンドは出力を表示しません。等しい文字列の == インジケーターが表示されます。

次のコマンドは、2つの類似した文字列を比較します。

Compare-Object "Apple" "apple" -IncludeEqual

出力:

InputObject SideIndicator
----------- -------------
Apple       ==

上記の例では、大文字と小文字が異なりますが、同じインジケーターが表示されるため、大文字と小文字は区別されません。大文字と小文字を区別する文字列を比較するには、-CaseSensitive パラメータを使用する必要があります。

Compare-Object "Apple" "apple" -CaseSensitive

出力:

InputObject SideIndicator
----------- -------------
apple       =>
Apple       <=

ご覧のとおり、今回は 2つの文字列の違いを示しています。

PowerShell で Compare-Object コマンドレットを使用して PSCustomObject を比較する

Compare-Object を使用して、PowerShell の PSCustomObject を比較することもできます。

次の例は、Compare-Object を使用して 2つの PSCustomObject を比較する方法を示しています:$obj1$obj2

$obj1 = [PSCustomObject]@{ a = 10; b = 20}
$obj2 = [PSCustomObject]@{ a = 10; b = 20}
function Test-Object {
    param(
        [Parameter(Mandatory = $true)]
        $obj1,
        [Parameter(Mandatory = $false)]
        $obj2
    )

    return !(Compare-Object $obj1.PSObject.Properties $obj2.PSObject.Properties)
}
Test-Object $obj1 $obj2

出力:

True

True を返します。これは、両方のオブジェクトが同じ値を持ち、同一であることを意味します。

PowerShell で Compare-Object コマンドレットを使用してソースファイルと宛先ファイルを比較する

このチュートリアルでは、コンピューターの C ドライブにいくつかの .txt ファイルを含む 2つのフォルダーFolder1Folder2 を作成しました。

次のスクリプトは、ソースフォルダーFolder1 と宛先フォルダーFolder2 のファイルを比較します。

$sourcefiles = Get-ChildItem C:\Folder1
$destinationfiles = Get-ChildItem C:\Folder2
Compare-Object $sourcefiles $destinationfiles -IncludeEqual

Get-ChildItem コマンドレットは、2つの変数 $sourcefiles$destinationfiles にそれぞれ格納されているフォルダ Folder1Folder2 からコンテンツを取得するために使用されます。

出力:

InputObject SideIndicator
----------- -------------
Text3.txt   ==
Text4.txt   =>
Text1.txt   <=
Text2.txt   <=

上記の出力は、Test3.txt が両方のフォルダーに存在することを示しています。Test4.txt は宛先フォルダーにのみ存在しますが、Test1.txtTest2.txt はソースフォルダーにのみ存在します。

PowerShell で Compare-Object コマンドレットを使用してファイルのプロパティを比較する

Compare-Object を使用して、lastaccesstimelastwritetimelength などのプロパティでファイルを比較することもできます。-Property パラメーターは、比較するオブジェクトのプロパティを指定するために使用されます。

次のコマンドは、Compare-Object を使用して、プロパティ Name および Length によってファイルを比較します。

Compare-Object $sourcefiles $destinationfiles -Property Name, Length -IncludeEqual

出力:

Name      Length SideIndicator
----      ------ -------------
Test3.txt      5 ==
Test4.txt     12 =>
Test1.txt     12 <=
Test2.txt      8 <=

Compare-Object は、2つのオブジェクトを比較するためのシンプルで便利なコマンドです。このチュートリアルで、PowerShell を使用して 2つのオブジェクトが等しいかどうかを確認する方法が理解できたことを願っています。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - PowerShell Object