我正在尝试使用 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/