【发布时间】:2013-11-14 16:52:58
【问题描述】:
我有一个完整的 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”的异常:“异常 在 We bClient 请求期间发生。”在 line:20 char:17 + $wc.DownloadFile
我最初以为我指定了错误的 FTP 地址,所以我在 Windows 资源管理器中输入了 $uri 值并进入服务器,但注意到没有(可见)文件夹可供访问。
但是,完全相同的 $uri 文件路径正在通过 CMD 脚本为我获取请求的文件。
关于我哪里出错了有什么想法吗?
编辑 - 应@KeithHill 的要求,我重新编写了脚本以使用ftpWebRequest 而不是WebClient。代码如下,但我收到以下错误:
使用“0”参数调用“GetResponse”的异常:“远程 服务器返回错误:(431) 431 未请求安全机制 此时可用。 ." 在 line:23 char:39 + $ftpresponse = $ftprequest.GetResponse
代码如下:
$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
【问题讨论】:
-
你试过使用powershell cmd让吗?例如scriptolog.blogspot.com/2007/09/ftp-transfers-automation.html
标签: shell powershell ftp cmd etl