Re: Renaming and move file
For email notification please also check the Stack Overflow. That has nothing to do with WinSCP either.
param (
# Questi sono i parametri
$localPath = "C:\WEBORDER\ASSOCIATIONS_IT\Article*",
$remotePath = "/",
$archivePath = "C:\WEBORDER\ASSOCIATIONS_IT\ARCHIVE\" +$(Get-Date -f "yyyyMMddHHmmss")
)
New-Item -ItemType directory -Path $archivePath
try
{
# CARICO WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Sessione SFTP
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
HostName = "server"
UserName = "username"
Password = "password"
}
$session = New-Object WinSCP.Session
$session.SessionLogPath = "C:\WEBORDER\LOGS\incremental_LOG.log"
try
{
# Mi Connetto
$session.Open($sessionOptions)
# Format timestamp
$stamp = $(Get-Date -Format "yyyyMMddHHmmss")
# Utilizzando deliberatamente un trattino basso invece di un punto,
# poiché il punto ha un significato specifico nella maschera delle operazioni
$suffix = "_filepart"
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::On
# Carica tutti i file .xlsx con il suffisso "_filepart" temporaneo
$transferResult =
$session.PutFiles(($localPath + "*.xlsx"), ($remotePath + "*.*" + $suffix),
$False, $transferOptions)
$transferResult.Check()
# Rinomina i file caricati
foreach ($transfer in $transferResult.Transfers)
{
# Rumuovo il suffisso
$finalName =
$transfer.Destination.SubString(
0, $transfer.Destination.Length - $suffix.Length)
Write-Host "Renaming uploaded file $($transfer.Destination) to $finalName"
# Rinomina il file caricato con il suo nome finale
$session.MoveFile($transfer.Destination, $finalName)
# Success or error?
if ($transfer.Error -eq $Null)
{
Write-Host "Upload of $($transfer.FileName) succeeded, moving to Archive"
# Upload succeeded, move source file to Archive
Move-Item $transfer.FileName $archivePath
}
else
{
Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)"
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}
Archive
folder and rename it with timestamp.
param (
$localPath = "C:\WEBORDER\ASSOCIATIONS_IT\Article*",
$remotePath = "/",
$backupPath = "C:\WEBORDER\ASSOCIATIONS_IT\ARCHIVE\"
)
try
{
# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
HostName = "ftphost"
UserName = "username"
Password = "password"
}
$session = New-Object WinSCP.Session
$session.SessionLogPath = "C:\WEBORDER\LOGS\incremental_LOG.log"
try
{
# Connect
$session.Open($sessionOptions)
# Deliberately using an underscore instead of a dot,
# as the dot has specific meaning in operation mask
$suffix = "_filepart"
$transferOptions = New-Object WinSCP.TransferOptions
# Particularly with SFTP protocol, prevent additional .filepart suffix
# from being added to uploaded files larger than 100 KB
$transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::On
# Upload all .xlsx files with temporary "_filepart" suffix
$transferResult =
$session.PutFiles(($localPath + "*.xlsx"), ($remotePath + "*.*" + $suffix),
$False, $transferOptions)
# Throw on any error
$transferResult.Check()
# Rename uploaded files
foreach ($transfer in $transferResult.Transfers)
{
# Remove suffix
$finalName =
$transfer.Destination.SubString(
0, $transfer.Destination.Length - $suffix.Length)
Write-Host "Renaming uploaded file $($transfer.Destination) to $finalName"
# Rename uploaded file to its final name
$session.MoveFile($transfer.Destination, $finalName)
# Success or error?
if ($transfer.Error -eq $Null)
{
Write-Host "Upload of $($transfer.FileName) succeeded, moving to backup"
# Upload succeeded, move source file to backup
Move-Item $transfer.FileName $backupPath
}
else
{
Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)"
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}