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

标签 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()

最佳答案

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

关于无需将文件写入磁盘的 PowerShell SFTP 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54948282/

相关文章:

c# - 如何在.NET中通过SFTP/SSH执行 “double hop”?

.net - 如何从 .NET 应用程序运行 "sudo su tomcat"

c# - 为什么在上传时将文件的本地目录创建到远程

PowerShell:使用前/后 block 纠缠单元测试

c# - 如何忽略 SSL 证书是由未知证书颁发机构签署的问题?

powershell - 比较不同目录中的文件夹名称并在csv中输出两个结果-PowerShell

powershell - 如何使用单个命令加载自定义 powershell 配置文件

ssh - WinSCP 命令行 - 添加已知主机

python - 从 Python 运行 WinSCP 命令

c# - 文件传输详细信息持续绑定(bind),直到使用 WPF 在窗口中传输文件