powershell winscp在传输后获取本地文件名,以便我可以附加到电子邮件

powershell winscp在传输后获取本地文件名,以便我可以附加到电子邮件,powershell,winscp,Powershell,Winscp,您好,我正在尝试获取刚下载的文件的文件名,该文件的本地路径为C:\users\user\desktop\test.txt,以便将其附加到电子邮件中。 我正在将powershell与winscp.net库一起使用 这是密码 param ( $localPath = "C:\upload\*", $remotePath = "/home/user/", $backupPath = "C:\backup\" ) try { # Load WinSCP .NET assembly

您好,我正在尝试获取刚下载的文件的文件名,该文件的本地路径为C:\users\user\desktop\test.txt,以便将其附加到电子邮件中。 我正在将powershell与winscp.net库一起使用

这是密码

    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 
} 

提前感谢您

如果您想使用WinSCP库中的$session.getFileInfo(),请查找$transfer.destination。例如,
$session.getFileInfo($transfer.Destination)


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

此脚本上载文件。那是打字错误吗?你想要上传的所有文件的名称吗?我正在尝试获取文件名,而它在循环中,它将为每个文件发送电子邮件。这不是你已经使用的
$transfer.FileName
?我尝试过它不起作用。我得到:参数为null或空。请提供一个不为null或空的参数,然后重试该命令。我没有尝试使用$session.getFileInfo(),这只是我最后一次尝试。我只是试图获得本地文件下载后的路径,以便我可以附加到一封电子邮件。例如,如果最后一个文件是C:\users\user\desktop\test.txt,并假设它存储在$transfer.filename中(我知道它不是远程文件),我将尝试查找此处的内容-Attach(*此处即$transfer.filename)