在 WebClient 的 FTP 凭据中使用特殊字符(斜杠)
Using special characters (slash) in FTP credentials with WebClient
编辑:我发现肯定是密码导致了问题。我的密码中有一个正斜杠,无法弄清楚如何让它接受它。我已经尝试用 %5B
替换它。更改密码是不可能的。
cd v:
$username = "*********"
$password = "*********"
$usrpass = $username + ":" + $password
$webclient = New-Object -TypeName System.Net.WebClient
function ftp-test
{
if (Test-Path v:\*.204)
{
$files = Get-ChildItem v:\ -name -Include *.204 | where { ! $_.PSIsContainer } #gets list of only the .204 files
foreach ($file in $files)
{
$ftp = "ftp://$usrpass@ftp.example.com/IN/$file"
Write-Host $ftp
$uri = New-Object -TypeName System.Uri -ArgumentList $ftp
$webclient.UploadFile($uri, $file)
}
}
}
ftp-test
当我 运行 上面的代码时,我得到
Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient request."
At line:13 char:34
+ $webclient.UploadFile <<<< ($uri, $file)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
我不确定是什么问题。搜索带来了代理问题,但我没有需要通过的代理。
我可以使用 ftp.exe
手动上传文件,但如果可能,我宁愿在 PowerShell 中完成所有这些操作,而不是生成脚本以使用 ftp.exe
with.
您必须 URL-encode 特殊字符。 请注意,编码的斜杠 (/
) 是 %2F
,而不是 %5B
(即 [
)。
而不是硬编码编码字符,使用Uri.EscapeDataString
:
$usrpass = $username + ":" + [System.Uri]::EscapeDataString($password)
或者使用WebClient.Credentials
property,你不需要转义任何东西:
$webclient.Credentials =
New-Object System.Net.NetworkCredential($username, $password)
...
$ftp = "ftp://ftp.example.com/IN/$file"
与 (Ftp)WebRequest
类似:
编辑:我发现肯定是密码导致了问题。我的密码中有一个正斜杠,无法弄清楚如何让它接受它。我已经尝试用 %5B
替换它。更改密码是不可能的。
cd v:
$username = "*********"
$password = "*********"
$usrpass = $username + ":" + $password
$webclient = New-Object -TypeName System.Net.WebClient
function ftp-test
{
if (Test-Path v:\*.204)
{
$files = Get-ChildItem v:\ -name -Include *.204 | where { ! $_.PSIsContainer } #gets list of only the .204 files
foreach ($file in $files)
{
$ftp = "ftp://$usrpass@ftp.example.com/IN/$file"
Write-Host $ftp
$uri = New-Object -TypeName System.Uri -ArgumentList $ftp
$webclient.UploadFile($uri, $file)
}
}
}
ftp-test
当我 运行 上面的代码时,我得到
Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient request."
At line:13 char:34
+ $webclient.UploadFile <<<< ($uri, $file)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
我不确定是什么问题。搜索带来了代理问题,但我没有需要通过的代理。
我可以使用 ftp.exe
手动上传文件,但如果可能,我宁愿在 PowerShell 中完成所有这些操作,而不是生成脚本以使用 ftp.exe
with.
您必须 URL-encode 特殊字符。 请注意,编码的斜杠 (/
) 是 %2F
,而不是 %5B
(即 [
)。
而不是硬编码编码字符,使用Uri.EscapeDataString
:
$usrpass = $username + ":" + [System.Uri]::EscapeDataString($password)
或者使用WebClient.Credentials
property,你不需要转义任何东西:
$webclient.Credentials =
New-Object System.Net.NetworkCredential($username, $password)
...
$ftp = "ftp://ftp.example.com/IN/$file"
与 (Ftp)WebRequest
类似: