[Powershell] FileTransferProgress
Hi,
i'm trying to automate my Customer File Transfers.
Everything works fine except the File Transfer Event.
I used the Example on your Page, but it doesn't work, it looks like the event didn't get fired on Transfer.
I'm using WinSCP Version v5.2.4 (beta) and the equivalent .net assembly / COM library (winscp524automation).
Could someone please take a look at my Script?
This is my Script:
My SFTP.Conf
The Console Result:
Thanks,
burn
i'm trying to automate my Customer File Transfers.
Everything works fine except the File Transfer Event.
I used the Example on your Page, but it doesn't work, it looks like the event didn't get fired on Transfer.
I'm using WinSCP Version v5.2.4 (beta) and the equivalent .net assembly / COM library (winscp524automation).
Could someone please take a look at my Script?
This is my Script:
# Config # [Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\WinSCP_beta\WinSCPnet.dll") $script:startdir = Split-Path $MyInvocation.MyCommand.Path [xml]$XML = get-content "$($script:startdir)\SFTP.conf" # Script # function LOG($customer, $logMessage) { $logFile = "$($script:startdir)\Logs\$(Get-Date -format "MMyyyy")_$($customer)-SFTP.log" Add-content $logFile -value "[$(Get-Date -format "dd.MM.yyyy HH:mm:ss")] $logMessage" Write-Host "[$(Get-Date -format "dd.MM.yyyy HH:mm:ss")] $logMessage" } $script:lastFileName = $Null function FileTransferProgress { Param($e) # Print transfer progress Write-Host "TEST" Write-Host -NoNewline ("`r{0} ({1:P0})" -f $e.FileName, $e.FileProgress) # Remember a name of the last file reported $script:lastFileName = $e.FileName } foreach ($customer in $XML.SFTP.Customer) { $ftpOptions = New-Object WinSCP.SessionOptions $ftpOptions.Protocol = [WinSCP.Protocol]::Sftp if (!$customer.PORT) {$ftpOptions.PortNumber = "22"} else {$ftpOptions.PortNumber = $customer.PORT} $ftpOptions.HostName = $customer.IP $ftpOptions.UserName = $customer.USER $ftpOptions.Password = $customer.PASS $ftpOptions.SshHostKeyFingerprint = $customer.FINGERPRINT #$ftpOptions.Timeout = New-TimeSpan -Seconds 10 $ftp = New-Object WinSCP.Session try { ## TransferProgress Event ## Register-ObjectEvent -inputObject $ftp -eventName FileTransferProgress -Action {FileTransferProgress($event.sourceEventArgs)} $ftp.Open($ftpOptions) LOG $customer.name "Connecting to $($customer.name) -> $($ftpOptions.HostName):$($ftpOptions.PortNumber)" if ($ftp.FileExists($customer.REMOTEDIR)) { LOG $customer.name "$($customer.REMOTEDIR) exists -- Starting download($($customer.MASK))" ## List Files foreach ($file in $ftp.ListDirectory($customer.REMOTEDIR).Files | Where-Object {$_.name -like $customer.MASK}) { LOG $customer.name "$($file.Name) ($($file.Length))" } ## $ftp.GetFiles("$($customer.REMOTEDIR)/$($customer.MASK)", $customer.LOCALDIR).Check() LOG $customer.name "File Transfer finished Successfully" } else { LOG $Customer.name "Remote Direcotry $($customer.REMOTEDIR) doesn't exist -- Closing Connection" } } catch [Exception] { LOG $customer.name "ERROR: $($_.Exception.Message)" } finally { $ftp.Dispose() } }
My SFTP.Conf
<SFTP> <CUSTOMER name="Test"> <IP>192.168.0.1</IP> <PORT>22</PORT> <USER>Testuser</USER> <PASS>Testpass</PASS> <REMOTEDIR>/TEST</REMOTEDIR> <LOCALDIR>C:\Testcustomer\Data\</LOCALDIR> <MASK>*.pdf</MASK> <FINGERPRINT>ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx</FINGERPRINT> </CUSTOMER> </SFTP>
The Console Result:
GAC Version Location --- ------- -------- False v2.0.50727 C:\Program Files (x86)\WinSCP_beta\WinSCPnet.dll Module : __DynamicModule_5452ae7c-33be-48a9-9620-8d47cb93c7c6 StatusMessage : HasMoreData : False Location : Command : FileTransferProgress($event.sourceEventArgs) JobStateInfo : NotStarted Finished : System.Threading.ManualResetEvent InstanceId : d1ee00b2-233f-4894-99e6-11f92eedc11c Id : 3 Name : 2a30f000-90a4-4d1d-be8c-cc3a645a8edf ChildJobs : {} Output : {} Error : {} Progress : {} Verbose : {} Debug : {} Warning : {} State : NotStarted [19.09.2013 08:46:22] Connecting to Test -> 192.168.0.1:22 [19.09.2013 08:46:22] /TEST exists -- Starting download(*.pdf) [19.09.2013 08:46:25] test.pdf (26055) [19.09.2013 08:46:25] File Transfer finished Successfully
Thanks,
burn