.net 在使用powershell上载SFTP文件时,是否有方法避免创建临时文件?

.net 在使用powershell上载SFTP文件时,是否有方法避免创建临时文件?,.net,powershell,sftp,winscp,winscp-net,.net,Powershell,Sftp,Winscp,Winscp Net,我编写了一个powershell脚本,用于将文件上载到远程FTP服务器。我成功连接到服务器,但在上载过程中,它使用filepart创建了一个临时文件,其名称与本地文件的大小相同,但从未将临时文件重命名回原始本地文件名。由于文件名不是服务器期望看到的名称,因此会将其隔离。我想知道是否有办法避免在上传过程中创建此临时文件?我正在使用最新版本的Powershell ISE运行脚本 这是我的密码: Add-Type -Path ("C:\Program Files (x86)\WinSCP\WinSCP

我编写了一个powershell脚本,用于将文件上载到远程FTP服务器。我成功连接到服务器,但在上载过程中,它使用filepart创建了一个临时文件,其名称与本地文件的大小相同,但从未将临时文件重命名回原始本地文件名。由于文件名不是服务器期望看到的名称,因此会将其隔离。我想知道是否有办法避免在上传过程中创建此临时文件?我正在使用最新版本的Powershell ISE运行脚本

这是我的密码:

Add-Type -Path ("C:\Program Files (x86)\WinSCP\WinSCPnet.dll")

# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "***.***.***.***"
PortNumber = ****
UserName = "***********"
Password = '*******'
SshHostKeyFingerprint = "ssh-rsa 2048 9c:cb:ea:c2:25:50:cf:4e:eb:97:6c:ad:9b:28:a9:25"
GiveUpSecurityAndAcceptAnySshHostKey = "True"
#GiveUpSecurityAndAcceptAnyTlsHostCertificate = "true"
#FtpSecure = "True"
#$ftp.Passive = $false
}
$session = New-Object WinSCP.Session
$session.SessionLogPath = "\\***.***.***.***\vipsvr\Rancho\MRDF_Report\UploadLog.log"
# Logging Configuration
$date = Get-Date -Format MM-dd-yy
$timestamp = Get-Date -Format "MM/dd/yyyy h:mm:s"
$logFile = "\\***.***.***.***\vipsvr\Rancho\MRDF_Report\moveMRDF_$($date).log"
Add-Content -Path $logFile "Start of logging"
Add-Content -Path $logFile "MRDF File Processing Log"
Add-Content -Path $logFile $timestamp
$date = Get-Date -Format MM-dd-yy

# Setup File Paths 
$prodPath = "\\***.***.***.***\vipsvr\Rancho\MRDF_Report\Reports"
$remoteProdPath = "/MRDF/" 
Add-Content -Path $logfile $prodPath
Add-Content -Path  $logfile $remoteProdPath
$transferFile = "\\***.***.***.***\vipsvr\Rancho\MRDF_Report\Reports\12_20_2019_Report.zip"
Add-Content -Path  $logfile $session
Add-Content -Path  $logfile $transferFile

# Connect & Transfer to FTP Server
Try
{
    #echo $sessionOptions
    $session.Open($sessionOptions)
    #echo 'after open'
    Add-Content -Path  $logfile $session
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
    $transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::Off
    $session.PutFiles($transferFile, $remoteProdPath)
}
finally
{
    $session.Dispose()
}
我正在使用,在上传和下载命令期间,我必须传递传输选项

以下是我正在使用的:

$TransferOptions = New-WinSCPTransferOption -ResumeSupport $(New-WinSCPTransferResumeSupport -State Off)

Send-WinSCPItem -WinSCPSession $Session -TransferOptions $TransferOptions -Path "C:\test.txt" -Destination "/test/path" -Verbose
没有
-TransferOptions
我知道了。filepart是创建的,但是有
-TransferOptions
没有.filepart

调用.putfile时,请尝试传递传输选项。大概是这样的:

$session.PutFiles($MCRline, $remotePath, $False, $transferOptions).Check()
查看此链接:

我正在使用,在上载和下载命令期间,我必须传递传输选项

以下是我正在使用的:

$TransferOptions = New-WinSCPTransferOption -ResumeSupport $(New-WinSCPTransferResumeSupport -State Off)

Send-WinSCPItem -WinSCPSession $Session -TransferOptions $TransferOptions -Path "C:\test.txt" -Destination "/test/path" -Verbose
没有
-TransferOptions
我知道了。filepart是创建的,但是有
-TransferOptions
没有.filepart

调用.putfile时,请尝试传递传输选项。大概是这样的:

$session.PutFiles($MCRline, $remotePath, $False, $transferOptions).Check()

查看此链接:

您从未使用
$transferOptions
变量。您必须将其传递给:


您从不使用
$transferOptions
变量。您必须将其传递给:


您可以禁用临时名称功能吗?如果没有,也许您可以尝试在上传后手动启动“重命名”?您可以禁用临时名称功能吗?如果没有,也许你可以尝试在上传后手动启动“重命名”?回答与我的回答相同posted@LT-对。事实上,我没有把你的答案读到最后:)我只读了使用PowerShell包装器的部分。我将删除我的答案。我编辑了你的答案,以突出实际的解决方案。回答与我的答案相同posted@LT-对。事实上,我没有把你的答案读到最后:)我只读了使用PowerShell包装器的部分。我将删除我的答案。我对你的答案进行了编辑,以突出实际的解决方案。