0

我有一个完整的 FTP 请求保存到 .CMD 文件。

这是我的 CMD 脚本:

@echo off
setlocal
set uname=exUsername
    set passw=exPassword
    set hostname=exHostname
    set filespec=exSpec
echo %uname%>                     test.ftp
echo %passw%>>                    test.ftp
echo pwd>>                        test.ftp
echo cd exDir>>                   test.ftp
echo binary>>                     test.ftp
echo get %filespec%>>             test.ftp
echo bye>>                        test.ftp
ftp -s:test.ftp %hostname%
if errorlevel 1 pause
endlocal

我想将上面的代码翻译成 PowerShell 脚本。

这是我的 PowerShell 脚本:

$uname = "exUsername"
$passw = "exPassword"
$hostname = "exHostname"
$filespec = "exSpec"
$dir = "exDir"

$uri = "ftp://$uname`:$passw@$hostname/$dir/$filespec"

$wc = New-Object System.Net.WebClient
$wc.DownloadFile($uri, "C:\")

到目前为止,我的 PowerShell 脚本不起作用。这是我的错误:

使用“2”参数调用“DownloadFile”的异常:“WebClient 请求期间发生异常。” 在 line:20 char:17 + $wc.DownloadFile <<<< ($uri, "C:\") + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException

我最初以为我指定了错误的 FTP 地址,所以我将$uri值输入 Windows 资源管理器并进入服务器,但注意到没有(可见)文件夹可供访问。

但是,完全相同$uri的文件路径通过 CMD 脚本让我获得了请求的文件。

关于我要去哪里错的任何想法?

编辑- 应@KeithHill 的要求,我重新编写了脚本以使用ftpWebRequest而不是WebClient. 代码如下,但我收到以下错误:

使用“0”参数调用“GetResponse”的异常:“远程服务器返回错误:(431) 431 请求的安全机制此时不可用。.” 在 line:23 char:39 + $ftpresponse = $ftprequest.GetResponse <<<< () + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException 术语“写出”未被识别为名称cmdlet、函数、脚本文件或可运行的程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。

下面的代码:

$uname = "exUsername"
$passw = "exPassword"
$hostname = "exHostname"
$filespec = "exSpec"
$dir = "exDir"

$uri = "exUri"


# Create an FTPWebRequest object to handle the connection to the FTP server
$ftprequest = [System.Net.FtpWebRequest]::Create($uri)

# Set the request's network credentials for an authenticated connection
$ftprequest.Credentials = New-Object System.Net.NetworkCredential($uname,$passw)

# Set FTPWebRequest method to ListDirectory
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory
$ftprequest.EnableSsl = $True
$ftprequest.UseBinary = $True
$ftprequest.UsePassive = $True
$ftprequest.KeepAlive = $False

$ftpresponse = $ftprequest.GetResponse()

Write-Out $ftpresponse.StatusCode
Write-Out $ftpresponse.StatusDescription
4

1 回答 1

1

对于DownloadFile,第二个参数必须是文件名"c:\$filespec",而不仅仅是驱动器说明符。

于 2013-11-14T17:02:28.997 回答