Private/Compare-PSPObject.ps1
Function Compare-PSObject { [CmdLetBinding()] Param ( [Parameter( Mandatory = $True, Position = 0 )] [PSObject] $ReferenceObject, [Parameter( Mandatory = $True, ValueFromPipeLine = $True, Position = 1 )] [PSObject] $DifferenceObject ) Begin { # Setup objects for use $ReferenceStream = New-Object System.IO.MemoryStream $DifferenceStream = New-Object System.IO.MemoryStream $Binary = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter $Algorithm = [Security.Cryptography.HashAlgorithm]::Create("MD5") $Identical = $False } Process { # Serialize data using BinaryFormatter $Binary.Serialize($ReferenceStream, $ReferenceObject) # Reset Stream position $ReferenceStream.Position = 0 $ReferenceHash = -join ($Algorithm.ComputeHash($ReferenceStream) | ForEach-Object -Process {"{0:x2}" -f $_}) # Serialize data using BinaryFormatter $Binary.Serialize($DifferenceStream, $DifferenceObject) # Reset Stream position $DifferenceStream.Position = 0 $DifferenceHash = -join ($Algorithm.ComputeHash($DifferenceStream) | ForEach-Object -Process {"{0:x2}" -f $_}) If ($ReferenceHash -ne $DifferenceHash) { $Identical = $False } } End { Return $Identical } } |