PowerShell で 2つのオブジェクトが同一かどうかを判断する
-
PowerShell で
Compare-Object
コマンドレットを使用して 2つの文字列を比較する -
PowerShell で
Compare-Object
コマンドレットを使用してPSCustomObject
を比較する -
PowerShell で
Compare-Object
コマンドレットを使用してソースファイルと宛先ファイルを比較する -
PowerShell で
Compare-Object
コマンドレットを使用してファイルのプロパティを比較する
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つのフォルダーFolder1
と Folder2
を作成しました。
次のスクリプトは、ソースフォルダーFolder1
と宛先フォルダーFolder2
のファイルを比較します。
$sourcefiles = Get-ChildItem C:\Folder1
$destinationfiles = Get-ChildItem C:\Folder2
Compare-Object $sourcefiles $destinationfiles -IncludeEqual
Get-ChildItem
コマンドレットは、2つの変数 $sourcefiles
と $destinationfiles
にそれぞれ格納されているフォルダ Folder1
と Folder2
からコンテンツを取得するために使用されます。
出力:
InputObject SideIndicator
----------- -------------
Text3.txt ==
Text4.txt =>
Text1.txt <=
Text2.txt <=
上記の出力は、Test3.txt
が両方のフォルダーに存在することを示しています。Test4.txt
は宛先フォルダーにのみ存在しますが、Test1.txt
と Test2.txt
はソースフォルダーにのみ存在します。
PowerShell で Compare-Object
コマンドレットを使用してファイルのプロパティを比較する
Compare-Object
を使用して、lastaccesstime
、lastwritetime
、length
などのプロパティでファイルを比較することもできます。-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つのオブジェクトが等しいかどうかを確認する方法が理解できたことを願っています。