Verify Checksum before deleting files ...
Hello,
I found 2 scripts in the powershell examples page , I am using the first to download and delete files
the second script compare local file with remote file checksum
my objectif is to verify checksum before deleting files from remote directories.
any idea about how to include the checksum verification inside the first script ?
script 1 :
fore more details (I replaced synchronize with get function) : https://winscp.net/eng/docs/library_example_delete_after_successful_download
fore more details : https://winscp.net/eng/docs/library_example_verify_file_checksum
I found 2 scripts in the powershell examples page , I am using the first to download and delete files
the second script compare local file with remote file checksum
my objectif is to verify checksum before deleting files from remote directories.
any idea about how to include the checksum verification inside the first script ?
script 1 :
fore more details (I replaced synchronize with get function) : https://winscp.net/eng/docs/library_example_delete_after_successful_download
try { # Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::ftp FtpSecure = [WinSCP.FtpSecure]::Implicit HostName = "xxxx" UserName = "xxxx" Password = "xxxxx" PortNumber = "990" FtpMode = "Passive" TlsHostCertificateFingerprint = "xxxxxx" } $session = New-Object WinSCP.Session $session.SessionLogPath = "x:\xxxx.log" try { # Connect $session.Open($sessionOptions) # Download files $transferOptions = New-Object WinSCP.TransferOptions $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary $transferOptions.FileMask = "*" $transferOptions.PreserveTimestamp = $true $transferResult = $session.GetFiles("/","x:\xxxx", $False, $transferOptions) # Throw on any error $transferResult.Check() # Print results foreach ($transfer in $transferResult.Transfers) { Write-Host ("Download of {0} succeeded" -f $transfer.FileName) #$removalResult = $session.RemoveFiles($session.EscapeFileMask($transfer.FileName)) #if ($removalResult.IsSuccess) #{ #Write-Host ("Removing of file {0} succeeded" -f #$transfer.FileName) #} #else #{ #Write-Host ("Removing of file {0} failed" -f #$transfer.FileName) #} } } finally { # Disconnect, clean up $session.Dispose() } exit 0 } catch [Exception] { Write-Host $_.Exception.Message exit 1 }
script 2 :
fore more details : https://winscp.net/eng/docs/library_example_verify_file_checksum
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 # Calculate local file checksum $sha1 = [System.Security.Cryptography.SHA1]::Create() $localStream = [System.IO.File]::OpenRead($localPath) $localChecksum = [System.BitConverter]::ToString($sha1.ComputeHash($localStream)) Write-Host $localChecksum # Load WinSCP .NET assembly $assemblyPath = if ($env:WINSCP_PATH) { $env:WINSCP_PATH } else { $PSScriptRoot } Add-Type -Path (Join-Path $assemblyPath "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 # Calculate remote file checksum $remoteChecksum = [System.BitConverter]::ToString($session.CalculateFileChecksum("sha-1", $remotePath)) Write-Host $remoteChecksum } finally { # Disconnect, clean up $session.Dispose() } # Compare cheksums if ($localChecksum -eq $remoteChecksum) { Write-Host "Match" $result = 0 } else { Write-Host "Does NOT match" $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