powershell winscp在转移后获取本地文件名,因此我可以附加到电子邮件

时间:2015-07-24 19:40:57

标签: powershell winscp

您好我正在尝试使用localpath获取刚刚下载的文件的文件名,即C:\ users \ user \ desktop \ test.txt,以便我可以将其附加到电子邮件中。 我在winscp .net库中使用PowerShell

这是代码

    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 
} 

提前谢谢

1 个答案:

答案 0 :(得分:1)

如果您想要从WinSCP库中使用$ session.getFileInfo(),那么您正在寻找$ transfer.destination。即$session.getFileInfo($transfer.Destination)

否则,如果您从本地路径中读取文件的属性,则可以使用Powershell内置的cmdlet:get-itemproperty $transfer.filename