John Smith
John Smith

Reputation: 9

powershell winscp get local filename after transfer so i can attach to email

Hello I am trying to get the filename of the file just downloaded with the localpath ie C:\users\user\desktop\test.txt so i can attach it to an email. I am using powershell with the winscp .net library

here is the code

    param ( 
$localPath = "C:\upload\*", 
$remotePath = "/home/user/", 
$backupPath = "C:\backup\" 
) 

try 
{ 
# Load WinSCP .NET assembly 
Add-Type -Path "WinSCPnet.dll" 

# Setup session options 
$sessionOptions = New-Object WinSCP.SessionOptions 
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp 
$sessionOptions.HostName = "example.com" 
$sessionOptions.UserName = "user" 
$sessionOptions.Password = "mypassword" 
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

$session = New-Object WinSCP.Session 

try 
{ 
# Connect 
$session.Open($sessionOptions) 

# Upload files, collect results 
$transferResult = $session.PutFiles($localPath, $remotePath) 

# Iterate over every transfer 
foreach ($transfer in $transferResult.Transfers) 
{ 
# Success or error? 
if ($transfer.Error -eq $Null) 
{ 
Write-Host ("Upload of {0} succeeded, moving to backup" -f 
$transfer.FileName) 
Send-MailMessage -From $From -to $To -Cc $Cc -Bc $Bc -Attach $session.GetFileInfo(Filename) -Subject $Subject -Body $Body -SmtpServer $SMTPServer
 # Upload succeeded, move source file to backup 
Move-Item $transfer.FileName $backupPath 
} 
else 
{ 
Write-Host ("Upload of {0} failed: {1}" -f 
$transfer.FileName, $transfer.Error.Message) 
} 
} 
} 
finally 
{ 
# Disconnect, clean up 
$session.Dispose() 
} 

exit 0 
} 
catch [Exception] 
{ 
Write-Host $_.Exception.Message 
exit 1 
} 

thank you in advance

Upvotes: 1

Views: 893

Answers (1)

Jonathan H
Jonathan H

Reputation: 388

If you're wanting to use $session.getFileInfo() from the WinSCP library, you're looking for $transfer.destination. I.e. $session.getFileInfo($transfer.Destination).

Otherwise if you're reading the properties of the file from the local path, you could just use Powershell's built in cmdlets as such: get-itemproperty $transfer.filename

Upvotes: 1

Related Questions