我有一个完整的 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