Differences
This shows you the differences between the selected revisions of the page.
| script_download_timestamped_filename 2014-12-22 | script_download_timestamped_filename 2022-06-16 (current) | ||
| Line 1: | Line 1: | ||
| - | ====== [[download_timestamped_filename]] Downloading file to timestamped-filename ====== | + | ====== Downloading file to timestamped-filename ====== |
| - | ===== Using WinSCP .NET Assembly ===== | + | ===== [[library]] Using WinSCP .NET Assembly ===== |
| Use [[library|WinSCP .NET assembly]] from your favorite language. Use relevant construct of your language or API of your runtime environment for the file name formatting. | Use [[library|WinSCP .NET assembly]] from your favorite language. Use relevant construct of your language or API of your runtime environment for the file name formatting. | ||
| Line 19: | Line 19: | ||
| # Setup session options | # Setup session options | ||
| - | $sessionOptions = New-Object WinSCP.SessionOptions | + | $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ |
| - | ···$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp | + | ········Protocol = [WinSCP.Protocol]::Sftp |
| - | $sessionOptions.HostName = "example.com" | + | ·······HostName = "example.com" |
| - | $sessionOptions.UserName = "user" | + | ·······UserName = "user" |
| - | $sessionOptions.Password = "mypassword" | + | ·······Password = "mypassword" |
| - | $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" | + | ·······SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx..." |
| + | } | ||
| $session = New-Object WinSCP.Session | $session = New-Object WinSCP.Session | ||
| Line 34: | Line 35: | ||
| # Format timestamp | # Format timestamp | ||
| - | $stamp = $(Get-Date -f "yyyyMMddHHmmss") | + | $stamp = $(Get-Date -Format "yyyyMMddHHmmss") |
| # Download the file and throw on any error | # Download the file and throw on any error | ||
| Line 49: | Line 50: | ||
| exit 0 | exit 0 | ||
| } | } | ||
| - | catch [Exception] | + | catch |
| { | { | ||
| - | Write-Host $_.Exception.Message | + | Write-Host "Error: $($_.Exception.Message)" |
| exit 1 | exit 1 | ||
| } | } | ||
| </code> | </code> | ||
| - | ===== Using WinSCP Scripting ===== | + | ===== [[scripting]] Using WinSCP Scripting ===== |
| - | ==== [[batch]] Using TIMESTAMP Variable ==== | + | In scripting, you can use ''[[scripting#timestamp|%TIMESTAMP%]]'' construct to insert a real-time to a script. |
| - | //In the latest beta release//, &beta you can use ''[[scripting#timestamp|%TIMESTAMP%]]'' construct to insert a real-time to a script. | + | |
| <code winscp> | <code winscp> | ||
| - | option batch abort | ||
| - | option confirm off | ||
| open mysession | open mysession | ||
| get "/home/user/download.txt" "C:\downloaded\download.txt.%TIMESTAMP#yyyymmddhhnnss%" | get "/home/user/download.txt" "C:\downloaded\download.txt.%TIMESTAMP#yyyymmddhhnnss%" | ||
| exit | exit | ||
| - | </code> | ||
| - | |||
| - | |||
| - | ==== [[batch]] From a Batch File ==== | ||
| - | In Windows batch file, you may retrieve current time in locale-independent format using command ''[[http://technet.microsoft.com/en-us/library/bb491034.aspx|wmic]] os get LocalDateTime''. You can parse the value using using [[http://en.wikibooks.org/wiki/Windows_Batch_Scripting#String_processing|string processing syntax]]: | ||
| - | |||
| - | <code batch> | ||
| - | @echo off | ||
| - | |||
| - | for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set LDT=%%j | ||
| - | set STAMP=%LDT:~0,4%%LDT:~4,2%%LDT:~6,2%%LDT:~8,2%%LDT:~10,2%%LDT:~12,2% | ||
| - | |||
| - | winscp.com /script=script.txt | ||
| - | </code> | ||
| - | |||
| - | //Note that the expression after ''set STAMP='' shows how to extract individual date/time components, in case you need to interleave them by some punctuation. If not, you can replace it by simple ''%LDT:~0,14%''.// | ||
| - | |||
| - | The ''script.txt'' should make use of the variable ''STAMP'' using ''%STAMP%'' [[scripting#variables|syntax]]. For example: | ||
| - | |||
| - | <code winscp> | ||
| - | option batch abort | ||
| - | option confirm off | ||
| - | open mysession | ||
| - | get "/home/user/download.txt" "C:\downloaded\download.txt.%STAMP%" | ||
| - | exit | ||
| - | </code> | ||
| - | |||
| - | ==== From a JScript ==== | ||
| - | You may use following [[guide_automation_advanced#wsh|Windows script host JScript code]] (''example.js''): | ||
| - | |||
| - | <code javascript> | ||
| - | // Local path to download to (keep trailing slash) | ||
| - | var LOCALPATH = "c:\\downloaded\\"; | ||
| - | // Remote path to download from (keep trailing slash) | ||
| - | var REMOTEPATH = "/home/user/"; | ||
| - | // File to download | ||
| - | var FILE = "download.txt"; | ||
| - | // Session to connect to | ||
| - | var SESSION = "session"; | ||
| - | // Path to winscp.com | ||
| - | var WINSCP = "c:\\program files\\winscp\\winscp.com"; | ||
| - | |||
| - | // helper function to pad zeroes to the left of number | ||
| - | function pad(n, len) | ||
| - | { | ||
| - | var s = n.toString(); | ||
| - | while (s.length < len) | ||
| - | { | ||
| - | s = '0' + s; | ||
| - | } | ||
| - | return s; | ||
| - | } | ||
| - | |||
| - | var date = new Date(); | ||
| - | |||
| - | // format timestamp | ||
| - | var stamp = | ||
| - | pad(date.getFullYear(), 4) + | ||
| - | pad(date.getMonth(), 2) + | ||
| - | pad(date.getDate(), 2) + | ||
| - | pad(date.getHours(), 2) + | ||
| - | pad(date.getMinutes(), 2) + | ||
| - | pad(date.getSeconds(), 2); | ||
| - | |||
| - | var shell = WScript.CreateObject("WScript.Shell"); | ||
| - | |||
| - | // run winscp to download the file into timestamped-filename | ||
| - | exec = shell.Exec("\"" + WINSCP + "\""); | ||
| - | exec.StdIn.Write( | ||
| - | "option batch abort\n" + | ||
| - | "open \"" + SESSION + "\"\n" + | ||
| - | "get \"" + REMOTEPATH + FILE + "\" \"" + LOCALPATH + FILE + "." + stamp + "\"\n" + | ||
| - | "exit\n"); | ||
| - | |||
| - | // wait until it finishes and collect its output | ||
| - | var output = exec.StdOut.ReadAll(); | ||
| - | // optionally print the output | ||
| - | WScript.Echo(output); | ||
| - | </code> | ||
| - | |||
| - | Run the script with command: | ||
| - | <code batch> | ||
| - | cscript /nologo example.js | ||
| </code> | </code> | ||