我需要使用PowerShell脚本从SFTP服务器下载文件到本地机器。
需要使用的API/库需要能够监视传输结果、记录传输过程,并对已下载的文件进行存档/移动。
提前感谢您。
需要使用的API/库需要能够监视传输结果、记录传输过程,并对已下载的文件进行存档/移动。
提前感谢您。
在PowerShell和.NET框架中没有SFTP支持,因此您需要使用外部SFTP库。
一种可能性(您在问题中已标记)是WinSCP .NET程序集。有一篇关于如何从PowerShell中使用WinSCP的文章。
甚至有一个用于SFTP下载的PowerShell代码示例:
try
{
# 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)
# Download files
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$remotePath = "/home/user/*";
$localPath = "d:\download\*";
$transferResult =
$session.GetFiles($remotePath, $localPath, $False, $transferOptions)
# Throw on any error
$transferResult.Check()
# Print results
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Download of $($transfer.FileName) succeeded"
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}
WinSCP图形用户界面甚至可以像上面那样生成适用于特定会话设置和传输选项的PowerShell SFTP下载代码:
(我是WinSCP的作者)
另一种方法是调用OpenSSH的sftp
(常用于Linux系统)。最近的Windows 10和Windows 11版本中都内置了OpenSSH。