无需将文件写入磁盘

时间:2019-03-01 16:04:33

标签: powershell winscp winscp-net

我正在尝试使用PowerShell将SFTP上存储的薪资文件同步到SharePoint。我已经编写了大部分代码,我唯一不知道的是是否有办法避免将文件临时下载到磁盘上。考虑到这些文件的敏感性,我宁愿将文件存储为变量,就像get-content的工作方式一样,因此Jenkins从站上没有人能够看到其内容或取消删除临时文件。

这是我的工作代码,可以下载文件:

$session = New-Object WinSCP.Session
$session.Open($sessionOptions)
$file = $session.ListDirectory("/") | select -ExpandProperty files | ? {$_.FileType -ne "D"} | select -First 1
$session.GetFiles($file, "c:\temp\$($file.name)", $False, $transferOptions)
$session.Close()

是否可以替代WinSCP.Session.GetFiles [C:\ temp \ $($ file.name)]的第二个参数,使我可以将文件直接拖放到内存中,这样我就可以周围并转储到SharePoint?

如果您想知道如何将其添加到共享点中,请在没有问题的情况下将它与get-content一起使用:

$fileToUpload = get-content c:\temp\test.csv -Encoding Byte
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.Content = $fileToUpload
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.Url = "test.csv"
$Upload = $Folder.Files.Add($FileCreationInfo)
$Ctx.Load($Upload)
$Ctx.ExecuteQuery()

2 个答案:

答案 0 :(得分:0)

WinSCP .NET程序集当前仅支持下载到物理文件。

答案 1 :(得分:0)

WinSCP根本不这样做。我一直希望下游对象采用文件路径的替换,但这似乎是不可能的。但是我确实弄清楚了。转到posh-ssh模块后,我能够使用Get-SFTPContent命令,该命令使我可以将文件读入内存。

install-module posh-ssh
import-module posh-ssh
$Session = New-SFTPSession -ComputerName $SFTPHostName -Credential $SFTPcredential
Get-SFTPContent -SessionId $session.SessionId -Path $file.FullName -Encoding unicode -ContentType byte