Public/Compare-String.ps1
|
Function Compare-String { <# .Synopsis An easy way to compare individual characters of two strings. .EXAMPLE Compare-String -String1 "Captain Jack will get you by tonight" -String2 "Çaptain JAck" | Format-Table -AutoSize # Example Output Index String1/ASCII String2/ASCII Compare Algorithm String1_Hash String2_Hash ----- ------------- ------------- ------- --------- ------------ ------------ 0 C:67 Ç:199 Different SHA1 32096c2e0eff33d844ee6d675407ace18289357d 1d866b5fef7cdae2d4deba53c7ae4bdbf76ca671 1 a:97 a:97 Same SHA1 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 2 p:112 p:112 Same SHA1 516b9783fca517eecbd1d064da2d165310b19759 516b9783fca517eecbd1d064da2d165310b19759 3 t:116 t:116 Same SHA1 8efd86fb78a56a5145ed7739dcb00c78581c5375 8efd86fb78a56a5145ed7739dcb00c78581c5375 4 a:97 a:97 Same SHA1 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 5 i:105 i:105 Same SHA1 042dc4512fa3d391c5170cf3aa61e6a638f84342 042dc4512fa3d391c5170cf3aa61e6a638f84342 6 n:110 n:110 Same SHA1 d1854cae891ec7b29161ccaf79a24b00c274bdaa d1854cae891ec7b29161ccaf79a24b00c274bdaa 7 :32 :32 Same SHA1 b858cb282617fb0956d960215c8e84d1ccf909c6 b858cb282617fb0956d960215c8e84d1ccf909c6 8 J:74 J:74 Same SHA1 58668e7669fd564d99db5d581fcdb6a5618440b5 58668e7669fd564d99db5d581fcdb6a5618440b5 9 a:97 A:65 Different SHA1 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 6dcd4ce23d88e2ee9568ba546c007c63d9131c1b 10 c:99 c:99 Same SHA1 84a516841ba77a5b4648de2cd0dfcb30ea46dbb4 84a516841ba77a5b4648de2cd0dfcb30ea46dbb4 11 k:107 k:107 Same SHA1 13fbd79c3d390e5d6585a21e11ff5ec1970cff0c 13fbd79c3d390e5d6585a21e11ff5ec1970cff0c The Example above will compare the individual characters of the shortest parameter to that of the other parameter and display ASCII values for each while indicating any differences between characters of the same index/location. .NOTES Author: Tyson Paul Blog: https://monitoringguys.com/ Version: 1.0 Version History: 2020.02.26 - Slight revision. Added commenting, better Help content. Added to SCOMHelper module. 2018.04.20 - Original #> Param( [Parameter(Mandatory=$true, ValueFromPipeline=$false, Position=0, ParameterSetName='Parameter Set 1')] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [string]$String1, [Parameter(Mandatory=$true, ValueFromPipeline=$false, Position=1, ParameterSetName='Parameter Set 1')] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [string]$String2, [Parameter(Mandatory=$false, ValueFromPipeline=$false, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, Position=2, ParameterSetName='Parameter Set 1')] [ValidateSet("SHA", "SHA1", "MD5", "SHA256", "SHA384", "SHA512","RIPEMD160")] $Algorithm = "SHA1" #SHA1 is default. Ref: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.hashalgorithm.create?view=netframework-4.8 ) ######################### MAIN ################################ [System.Collections.ArrayList]$arr = @() 0..([math]::min(($String1.Length -1),($String2.Length -1))) | ForEach-Object { $String1_char = [string]$String1[$_] $String2_char = [string]$String2[$_] $String1_hash = Get-StringHash $String1_char -Algorithm $Algorithm $String2_hash = Get-StringHash $String2_char -Algorithm $Algorithm $obj = New-Object PSCustomObject $obj | Add-Member -Name 'Index' -Value $_ -MemberType NoteProperty $obj | Add-Member -Name 'String1/ASCII' -Value ("$($String1_char):$([double][char]$String1_char)") -MemberType NoteProperty $obj | Add-Member -Name 'String2/ASCII' -Value ("$($String2_char):$([double][char]$String2_char)") -MemberType NoteProperty If ($String1_hash -ne $String2_hash){ $obj | Add-Member -Name 'Compare' -Value "Different" -MemberType NoteProperty } Else{ $obj | Add-Member -Name 'Compare' -Value "Same" -MemberType NoteProperty } $obj | Add-Member -Name "Algorithm" -Value $Algorithm -MemberType NoteProperty $obj | Add-Member -Name "String1_Hash" -Value $String1_hash -MemberType NoteProperty $obj | Add-Member -Name "String2_Hash" -Value $String2_hash -MemberType NoteProperty $null = $arr.Add($obj) } Return ($arr | Format-Table -AutoSize) } |