Попробуй так:
$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>