Powershell ftp下载失败

时间:2014-04-06 00:03:44

标签: exception powershell ftp webclient

我在PowerShell中从ftp下载文件时遇到问题,这个脚本试图设置连接,搜索一些文件(我把这个部分正确)然后在工作目录下载它,我遇到的问题没有知道原因,请帮忙!!

以下是代码:

#IP address of DNS of the target % protocol
$protocol="ftp"
$target = "XXXX"
$connectionString = $protocol+"://"+$target
#Method to connect
$Request = [System.Net.WebRequest]::Create($connectionString) 
$Request.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails 


# Set Credentials "username",password
$username = "XXXXXXX"
$password = "XXXXXX"


# Read Username/password 
$Request.Credentials = New-Object System.Net.NetworkCredential $username,$password

$Response = $Request.GetResponse() 
$ResponseStream = $Response.GetResponseStream() 

# Select Pattern to search  
$pattern = "CCS"

# Set directory for download Files
$directory = [IO.Directory]::GetCurrentDirectory()


# Read and display the text in the file 
$Reader = new-object System.Io.StreamReader $Responsestream 
$files = ($Reader.ReadToEnd()) -split "`n" | Select-String "$pattern" | foreach { $_.ToString().split(” “)[28]}
$uri = (New-Object System.Uri($connectionString+"/"+$file))
$download = New-Object System.Net.WebRequestMethods+Ftp


foreach ($file in $files) {
    $destinationFile = $directory+"\"+$file  
    $sourceFile = $uri.OriginalString
    $download.DownloadFile($sourceFile, $destinationFile)
}


# Close Reader and Response objects 
$Reader.Close() 
$Response.Close()

#IP address of DNS of the target % protocol $protocol="ftp" $target = "XXXX" $connectionString = $protocol+"://"+$target #Method to connect $Request = [System.Net.WebRequest]::Create($connectionString) $Request.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails # Set Credentials "username",password $username = "XXXXXXX" $password = "XXXXXX" # Read Username/password $Request.Credentials = New-Object System.Net.NetworkCredential $username,$password $Response = $Request.GetResponse() $ResponseStream = $Response.GetResponseStream() # Select Pattern to search $pattern = "CCS" # Set directory for download Files $directory = [IO.Directory]::GetCurrentDirectory() # Read and display the text in the file $Reader = new-object System.Io.StreamReader $Responsestream $files = ($Reader.ReadToEnd()) -split "`n" | Select-String "$pattern" | foreach { $_.ToString().split(” “)[28]} $uri = (New-Object System.Uri($connectionString+"/"+$file)) $download = New-Object System.Net.WebRequestMethods+Ftp foreach ($file in $files) { $destinationFile = $directory+"\"+$file $sourceFile = $uri.OriginalString $download.DownloadFile($sourceFile, $destinationFile) } # Close Reader and Response objects $Reader.Close() $Response.Close()

当我运行它时,我得到了这个输出:

我在Powershell 3.0(Windows Server 2012)上运行它。请帮忙!

1 个答案:

答案 0 :(得分:3)

有关此问题的详细信息隐藏在此通用异常的内部异常中。你应该深入挖掘错误,找出真正的问题。

由于PowerShell错误存储为$ error,您可以在收到错误后立即尝试以下命令检查上一个错误的内部异常

$error[0].Exception.InnerException

为了充分利用错误消息,您可以使用人们编写的函数Resolve-Error

如果您希望您的脚本在这种情况下始终显示更好的错误消息,您可以使用try catch块来捕获错误并更好地显示它。像这样:

try {
  $download.DownloadFile($sourceFile, $destinationFile)
}
catch [System.Net.WebException] {
  if ($_.Exception.InnerException) {
    Write-Error $_.Exception.InnerException.Message
  } else {
    Write-Error $_.Exception.Message
  }
}