Загрузить файлы на FTP-сервер с помощью powershell - PullRequest
0 голосов
/ 26 июня 2019

У меня есть следующий код для загрузки файла на FTP-сервер через powershell, но он выдаёт мне эту ошибку:



Код:

$Directory=”C:\test”

#FTP server configuration
$ftpserver = “ftp://ftpserver/”
$username = “user”
$password = “pw”

$webclient = New-Object System.Net.WebClient

$webclient.Credentials = New-Object System.Net.NetworkCredential($username,$password)

#Copy each file which type is *.tx*
foreach($file in (dir $Directory “*.txt*”)){
“Uploading $file…”
$uri = New-Object System.Uri($ftpserver+$file.Name)
$webclient.UploadFile($uri, $file.FullName)
}

Ошибка:

Exception calling "UploadFile" with "2" argument(s): "Excepção durante um pedido WebClient."
At C:\Users\home\Desktop\test6.ps1:16 char:1
+ $webclient.UploadFile($uri, $file.FullName)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

1 Ответ

0 голосов
/ 26 июня 2019

Попробуй так:

$Directory = "C:\test"

#FTP server configuration
$ftpserver = "ftp://ftpserver/"
$username = "user"
$password = "pw"
$ftpserverURI = New-Object -TypeName System.Uri -ArgumentList $ftpserver, [System.UriKind]::Absolute

$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object -TypeName System.Net.NetworkCredential -ArgumentList $username, $password

#Copy each file which type is *.tx*
Get-ChildItem $Directory -Filter *.txt* | ForEach-Object {
    Write-Host "Uploading $($_.FullName)..."
    $uri = New-Object -TypeName System.Uri -ArgumentList $ftpserverURI, $_.Name
    $webclient.UploadFile($uri, [System.Net.WebRequestMethods+Ftp]::UploadFile, $_.FullName)
}

Различия в том, что я заставляю System.Uri комбинировать путь вместо того, чтобы полагаться на конкатенацию строк, и я говорю WebClient.UploadFile () о методе, который следует использовать при загрузке файла.

Если это не сработает, то я согласен с комментариями о том, что вы должны проверить журналы сервера. Если вы не можете, то попробуйте на сервере, для которого вы можете увидеть журналы. С другой стороны, вы можете попробовать использовать WinSCP, который также может быть написан с помощью PowerShell или с помощью специального файла сценария. WinSCP также имеет преимущество поддержки FTP, FTPS и SFTP. Насколько мне известно, .Net WebClient поддерживает только обычный FTP.

Что касается умных кавычек, они прекрасно работают в Windows PowerShell (<= v5.x), но совсем не работают в PowerShell Core (v6 +). Я бы не использовал их, чтобы сделать ваш код более переносимым и более перспективным. </p>

...