PowerShell SFTP下载而无需将文件写入磁盘

问题描述 投票:3回答:2

我正在尝试使用PowerShell将存储在SFTP上的工资单文件同步到SharePoint。我写了大部分代码,唯一我想不通的是,是否有办法避免暂时将文件下载到磁盘。鉴于这些文件的敏感性,我宁愿将文件存储为变量,这与get-content的工作方式不同,因此Jenkins slave上的任何人都无法查看其内容或取消删除临时文件。

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

$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?

如果你想知道我如何将它变成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()
powershell winscp winscp-net
2个回答
0
投票

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


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
© www.soinside.com 2019 - 2024. All rights reserved.