Created
November 17, 2015 10:57
-
-
Save Ineluctable/20b370d78ea025ceabd2 to your computer and use it in GitHub Desktop.
WinSCP - Verify checksum of a remote file against a local file over SFTP using native hashing commands.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
param ( | |
# Use Generate URL function to obtain a value for -sessionUrl parameter. | |
$sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xx-xx-xx@example.com/", | |
[Parameter(Mandatory)] | |
$localPath, | |
[Parameter(Mandatory)] | |
$remotePath, | |
[Switch] | |
$pause = $False | |
) | |
try | |
{ | |
Write-Host $localPath -foregroundcolor Gray | |
# Calculate local file checksum | |
$localChecksum = ((CertUtil -hashfile $localPath SHA1)[1] -replace " ","") | |
# Write-Host "Local Checksum:" | |
Write-Host $localChecksum | |
# Load WinSCP .NET assembly | |
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll") | |
# Setup session options | |
$sessionOptions = New-Object WinSCP.SessionOptions | |
$sessionOptions.ParseUrl($sessionUrl) | |
$session = New-Object WinSCP.Session | |
try | |
{ | |
# Connect | |
$session.Open($sessionOptions) | |
Write-Host $remotePath -foregroundcolor Gray | |
# Calculate remote file checksum | |
$sha1Command = "sha1sum -b $remotePath | awk '{print `$1}'" | |
$result = $session.ExecuteCommand($sha1Command) | |
$result.Check() | |
$remoteChecksum = $result.Output; | |
# Write-Host "Remote Checksum:" | |
Write-Host $remoteChecksum | |
} | |
finally | |
{ | |
# Disconnect, clean up | |
$session.Dispose() | |
} | |
# Compare cheksums | |
if ($localChecksum -eq $remoteChecksum) | |
{ | |
Write-Host | |
Write-Host "Match" -foregroundcolor "green" | |
$result = 0 | |
} | |
else | |
{ | |
Write-Host | |
Write-Host "Does NOT match" -foregroundcolor "red" | |
$result = 1 | |
} | |
} | |
catch [Exception] | |
{ | |
Write-Host $_.Exception.Message | |
$result = 1 | |
} | |
# Pause if -pause switch was used | |
if ($pause) | |
{ | |
Write-Host "Press any key to exit..." | |
[System.Console]::ReadKey() | Out-Null | |
} | |
exit $result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment