I use this script to get file between two dates via WinSCP. How is it possible to print in the console which files were found on the remote computer and which were not because at the moment I am not sure that all the files have been downloaded because it is possible that between the 2 times files are missing. (something like : If I enter date from 05.07.2023 to 07.07.2023 ; and script didn't find on remote computer one or more files return this message in console "File *.log from date x missing on remote computer ; same like "folder $remotefolder exist or not)
# Set up session options
$options = @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = $entry.IP
UserName = $User
Password = $Password
GiveUpSecurityAndAcceptAnySshHostKey = $true
}
try {
# Set up session options using first password
$sessionOptions = New-Object WinSCP.SessionOptions -Property $options
$session = New-Object WinSCP.Session
# Try Connect
$session.Open($sessionOptions)
}
catch {
# Set up session options using second settings
$options['HostName'] = $vpnIP
$options['UserName'] = $User
$options['Password'] = $Password
try {
$sessionOptions = New-Object WinSCP.SessionOptions -Property $options
$session = New-Object WinSCP.Session
# Try Connect
$session.Open($sessionOptions)
}
catch {
Write-Error "Could not open WinSCP session: $($_.Exception.Message)"
throw
}
}
# Date 1 START
do {
$date = $null
$today = Read-Host -Prompt ('Enter START date (inclusive) (e.g. {0}) [yyyy.MM.dd]' -f (Get-Date -Format "yyyy.MM.dd"))
try {
$date = Get-Date -Date $today -Format "yyyy-MM-dd" -ErrorAction Stop
'[OK] {0} Valid date - OK!' -f $date
}
catch {
'[X] {0} Invalid date!' -f $today
}
}
until ($date)
# Date 2 STOP
do {
$date1 = $null
Write-Host "Add +1 day" -ForegroundColor Red
$today1 = Read-Host -Prompt ('Enter END date (exclusive) (e.g. {0}) [yyyy.MM.dd]' -f (Get-Date -Format "yyyy.MM.dd"))
try {
$date1 = Get-Date -Date $today1 -Format "yyyy-MM-dd" -ErrorAction Stop
'[OK] {0} Valid date - OK!' -f $date1
}
catch {
'[X] {0} Invalid date!' -f $today1
}
}
until ($date1)
# ----- Date END
$session = New-Object WinSCP.Session
$file = "*.log"
$localPath = "\temp_files"
$remotePath = "/C:/log", "/C:/Back_up"
try {
# Connect
$session.Open($sessionOptions)
# Check exists folder
foreach ($remotePath in $remotePath)
{
if ($session.FileExists($remotePath))
{
Write-Host "[OK] Folder '$remotePath' exist" -ForegroundColor Green
# Transfer file
Write-Host "[i] '$date' - '$date1' > '$inputID' downloading..." -ForegroundColor Cyan
$session.GetFilesToDirectory($remotePath, $localPath, "*.log>=$date<=$date1").Check();
}
else
{
Write-Host "[X] INFO: Folder: '$remotePath' doesn't exist" -ForegroundColor Red
}
}
}
finally {
$session.Dispose()
}
Thank you,
Use the code from the basic WinSCP PowerShell download example:
$transferResult =
$session.GetFilesToDirectory($remotePath, $localPath, "*.log>=$date<=$date1")
# Throw on any error
$transferResult.Check()
# Print results
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Download of $($transfer.FileName) succeeded"
}
Your follow-up question:
Check if WinSCP downloaded files for every day between two dates