windows脚本实现自动上传文件至sftp,验证改为私钥,完整脚本
以下是一个Windows脚本实现自动上传文件至SFTP服务器,并使用私钥进行验证的完整脚本:
# 设置参数
$localFolder = "D:\data" # 本地文件夹路径
$remoteFolder = "/home/user/data" # 远程文件夹路径
$host = "sftp.example.com" # SFTP服务器的主机名或IP地址
$user = "username" # SFTP服务器的用户名
$privateKeyFile = "D:\private_key.ppk" # 私钥文件路径
# 加载WinSCP程序集
Add-Type -Path "D:\WinSCPnet.dll"
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = $host
UserName = $user
SshPrivateKeyPath = $privateKeyFile
}
$session = New-Object WinSCP.Session
$session.SessionLogPath = "D:\winscp.log"
try {
# 连接SFTP服务器
$session.Open($sessionOptions)
# 上传文件
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferOptions.PreserveTimestamp = $true
$transferResult = $session.PutFiles($localFolder + "\*", $remoteFolder, $false, $transferOptions)
# 输出上传结果
foreach ($transfer in $transferResult.Transfers) {
Write-Host ("Uploaded file: " + $transfer.FileName)
}
}
catch [Exception] {
Write-Host ("Error: " + $_.Exception.Message)
}
finally {
# 断开SFTP服务器连接
$session.Dispose()
}
脚本的详细说明:
-
首先设置了一些参数,例如本地文件夹路径、远程文件夹路径、SFTP服务器的主机名、用户名和私钥文件路径。
-
然后加载了WinSCP程序集,该程序集提供了与SFTP服务器交互的方法。
-
接着创建了一个SessionOptions对象,用于设置SFTP连接选项,例如协议、主机名、用户名和私钥路径。需要注意的是,这里使用了SSH私钥进行验证,需要提前生成私钥并将其保存到本地。
-
然后创建了一个Session对象,并打开连接。如果连接成功,就可以使用Session对象提供的方法与SFTP服务器进行交互了。
-
上传文件的过程使用了PutFiles方法。该方法需要传入本地文件夹路径、远程文件夹路径、是否递归上传和传输选项等参数。在传输选项中,我们设置了传输模式为二进制,以确保上传的文件不会被破坏;同时设置了保留时间戳,以确保上传的文件的修改时间与本地文件保持一致。
-
上传文件完成后,可以使用TransferResult对象获取上传结果,并输出上传成功的文件名等信息。
-
最后,断开与SFTP服务器的连接,并进行清理操作。
需要注意的是,由于上面的代码使用了WinSCP程序集,因此需要将该程序集文件(WinSCPnet.dll)放置到脚本所在的目录下,或者将其添加到Windows PowerShell的路径环境变量中。
原文地址: https://www.cveoy.top/t/topic/Ant 著作权归作者所有。请勿转载和采集!