我们被要求设置从我们的一台服务器到SFTP站点的自动上传。每周一早上都会有一个文件从数据库导出到文件管理器,他们希望在星期二将文件上传到SFTP。我们使用的当前身份验证方法是用户名和密码(我相信还有一个选项可以使用密钥文件,但是选择了用户名/密码选项)。
我想象的方法是让一个脚本坐在服务器上,由Windows任务调度程序触发,以便在特定时间(星期二)运行,该文件将获取有问题的文件,将其上传到SFTP,然后移动它用于备份目的的其他位置。
例如:
本地目录:C:\FileDump
SFTP目录:/Outbox/
备份目录:C:\Backup
此时我尝试了几件事WinSCP就是其中之一,以及SFTP PowerShell Snap-In但到目前为止我没有任何作品。
这将在Windows Server 2012R2上运行
当我运行Get-Host
时,我的控制台主机版本是4.0。
感谢。
答案 0 :(得分:46)
您没有告诉我们您对WinSCP有什么特别的问题,所以我真的只能重复WinSCP文档中的内容。
WinSCP-5.15.2-Automation.zip
; .zip
存档; 使用这样的代码(基于官方PowerShell upload example):
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "example.com"
UserName = "user"
Password = "mypassword"
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Upload
$session.PutFiles("C:\FileDump\export.txt", "/Outbox/").Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
您可以让WinSCP为您上传生成PowerShell脚本:
您将获得上述代码,并填写所有会话和转移设置。
(我是WinSCP的作者)
答案 1 :(得分:20)
目前没有内置的PowerShell方法来执行SFTP部分。你必须使用像psftp.exe或像Posh-SSH这样的PowerShell模块。
以下是使用Posh-SSH的示例:
# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)
# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'
# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'
# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH
# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential
# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath
#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }
# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath
一些补充说明:
这应该给你一个不错的起点。
答案 2 :(得分:4)
使用PuTTY's pscp.exe(我在if (parseInt(col.name,10) ===4 && $scope.seatMap.PlaneTypeCode ==="175" && $scope.TripSummary) {
col.available = false;
} // still getting false
目录中):
$env:path
答案 3 :(得分:3)
我能够使用PowerShell如下进行sftp:
PS C:\Users\user\Desktop> sftp user@aa.bb.cc.dd
user@aa.bb.cc.dd's password:
Connected to user@aa.bb.cc.dd.
sftp> ls
testFolder
sftp> cd testFolder
sftp> ls
taj_mahal.jpeg
sftp> put taj_mahal_1.jpeg
Uploading taj_mahal_1.jpeg to /home/user/testFolder/taj_mahal_1.jpeg
taj_mahal_1.jpeg 100% 11KB 35.6KB/s 00:00
sftp> ls
taj_mahal.jpeg taj_mahal_1.jpeg
sftp>
我还没有安装Posh-SSH或类似的东西。我正在使用Windows 10 Pro PowerShell。没有安装其他模块。
答案 4 :(得分:-2)
好吧,在使用 powershell 7 时,我们可以通过以下命令使用 sftp 简单地上传文件
echo "put localpath/file.txt destinationpath/file.txt" | sftp username@server
确保添加这些双引号。