Tôi đang sử dụng lệnh power shell dưới đây để sao chép tệp từ máy chủ "SFTP" sang máy chủ windows. vì một số lý do, Script không hoạt động, xin vui lòng giúp đỡ
# Scriptname.ps1
# send the files to Win-Server server F:\data\in
# Source files are deleted after transfer
# Local Path is the source path
# RemotePath is the flies destination path
Function Scriptname {
Param(
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $Username = $(throw "Username parameter is required"),
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $Password = $(throw "Password parameter is required"),
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $HostName = $(throw "HostName parameter is required"),
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $RemotePath = $(throw "RemotePath parameter is required"),
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $LocalPath = $(throw "LocalPath parameter is required"),
[Parameter(Mandatory=$true)]
[ValidateNotNull()]
[string] $SshHostKeyFingerprint = $(throw "SshHostKeyFingerprint parameter is required"),
$Remove=$true
)
if( -not (Test-Path $LocalPath)) {
throw("ERROR: Unable to locate LocalPath (path=${LocalPath})")
}
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
$SftpModuleDirectory = Split-Path $Invocation.MyCommand.Path
[Reflection.Assembly]::LoadFrom("${SftpModuleDirectory}\WinSCPnet.dll") | Out-Null
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = $HostName
$sessionOptions.UserName = $Username
$sessionOptions.Password = $Password
$sessionOptions.SshHostKeyFingerprint = $SshHostKeyFingerprint #"ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
$session = New-Object WinSCP.Session
# connect to FTP session
try {
$session.Open($sessionOptions)
$session.GetFiles($remotePath, $localPath,$remove).Check()
} catch {
if($_.Exception.ToString().Contains("Host key wasn't verified!")) {
throw("invalid SshHostKeyFingerprint, unable to open session to FTP (host=${HostName}, SshHostKeyFingerprint=${SshHostKeyFingerprint})")
}
elseif($_.Exception.ToString().Contains("No supported authentication methods available")) {
throw("Unable to open session to FTP (host=${HostName}, username=${Username})")
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
}
$UserName = GetEnvironmentConfigValue "Scriptname.UserName"
$Password = GetEnvironmentConfigValue "Scriptname.Password"
$HostName = GetEnvironmentConfigValue "Scriptname.HostName"
$RemotePath = GetEnvironmentConfigValue "Scriptname.RemotePath"
$LocalPath = GetEnvironmentConfigValue "Scriptname.LocalPath"
$SshHostKeyFingerprint = GetEnvironmentConfigValue "Scriptname.SshHostKeyFingerprint"
$Remove=$true
Write-host "values: ${Username} ${Password} ${HostName} ${RemotePath} ${LocalPath} ${SshHostKeyFingerprint}"
SFTPUploadFiles $Username $Password $HostName $RemotePath $LocalPath $SshHostKeyFingerprint
Lỗi gì bạn nhận được, và những gì không hoạt động cụ thể?
—
megamorf 22/03/2015
tập lệnh chạy không có lỗi nhưng không có tệp nào được hiển thị ở đường dẫn đích, tôi khá chắc chắn rằng các tệp trong đường dẫn nguồn, cảm ơn vì sự hợp tác cao của bạn
—
Ealhiary 22/03/2015
Tôi giả sử tất cả mã sau hàm là của bạn (GetEn MôiConfigValue, v.v.), đúng không? Có dự định rằng chức năng không bao giờ được gọi? Hàm được gọi là scriptname trong ví dụ của bạn chứ không phải
—
megamorf
SFTPUploadFiles
bạn sử dụng ở dòng cuối cùng của mã.
chính xác, những giá trị đó được lưu trong tệp môi trường nơi đã khai báo. và tôi đang gọi họ từ kịch bản. bởi vì tôi hiện đang làm việc trên môi trường nhiều giai đoạn và cần thay đổi đường dẫn trên mọi giai đoạn nhiều lần, có thể tôi đã trộn lẫn kịch bản giữa sao chép từ SFTP sang máy chủ cục bộ (cần phải làm) và sao chép từ cục bộ sang SFTP
—
Ealhiary
công việc của nó cảm ơn, cảm ơn rất nhiều "Hàm được gọi là scriptname trong ví dụ của bạn chứ không phải SFTPUploadFiles mà bạn sử dụng ở dòng cuối cùng của mã" đó là vấn đề
—
Ealhiary 22/03/2015