gpt4 book ai didi

powershell - 通过WebClient在FTP凭据中使用特殊字符(斜杠)

转载 作者:行者123 更新时间:2023-12-02 23:58:02 24 4
gpt4 key购买 nike

编辑:我发现绝对是导致问题的密码。我的密码中有一个正斜杠,并且无法弄清楚该如何接受它。我已经尝试用%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的脚本。

最佳答案

您必须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同样: Escape the @ character in my PowerShell FTP script

关于powershell - 通过WebClient在FTP凭据中使用特殊字符(斜杠),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37732020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com