Я хочу загрузить некоторые данные на три разных FTP-сервера. Это работает для двух из трех серверов. Причина, по которой он не работает для третьего сервера, заключается в том, что в пароле есть знак @
, и я не могу его избежать. Это просто не работает. Извините, я не могу показать вам пароль, но представьте себе ftp://username:p@ssword@ftp-server.com
. Теперь PowerShell считает, что пароль уже останавливается на первом @
знаке, но это не так. Таким образом, пароль, который использует PowerShell, неверен и адрес FTP-сервера тоже неверен.
Я пытался экранировать его с помощью '@' или в коде ASCII [char]64
или в качестве параметров.
Я действительно не знаю, что еще попробовать ...
$request = [Net.WebRequest]::Create("ftp://username:p@ssword@example.com/")
$request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$fileStream = [System.IO.File]::OpenRead("C:\Users\Desktop\file.zip")
$ftpStream = $request.GetRequestStream()
$buffer = New-Object Byte[] 10240
while (($read = $fileStream.Read($buffer, 0, $buffer.Length)) -gt 0)
{
$ftpStream.Write($buffer, 0, $read)
$pct = ($fileStream.Position / $fileStream.Length)
Write-Progress `
-Activity "Uploading" -Status ("{0:P0} complete:" -f $pct) `
-PercentComplete ($pct * 100)
}
$fileStream.CopyTo($ftpStream)
$ftpStream.Dispose()
$fileStream.Dispose()