簡體   English   中英

使用 PowerShell 從 FTP 站點下載多個文件

[英]Downloading multiple files from FTP site using PowerShell

我想使用 Windows 7 的 PowerShell 5.0 從 FTP 下載多個文件。我編寫的腳本適用於單個文件,但不適用於具有通配符的多個文件。 有人可以告訴我我做錯了什么嗎? 當我執行腳本時,我收到一條錯誤消息:

Exception calling "DownloadFile" with "2" argument(s): "An exception occurred during a WebClient request."At 
C:\Users\Documents\Powershell_Script\write-demo7.ps1:49 char:9
+         $webclient.DownloadFile($fileuri, $localfilename
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

我搜索了互聯網,找不到我的答案。 請幫助...
這是我的腳本:

function Get-FtpDir ($url,$credentials)
{
    $request = [Net.WebRequest]::Create($url)
    $request.Credentials = $credentials
    $request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
    $response = $request.GetResponse()
    $reader = New-Object IO.StreamReader $response.GetResponseStream()
    $readline = $reader.ReadLine()
    $output = New-Object System.Collections.Generic.List[System.Object]
    while ($readline -ne $null)
    {
        $output.Add($readline)
        $readline = $reader.ReadLine()
    }
    $reader.Close()
    $response.Close()
    $output
}

$server = "msftran.tran.com"
$user = "myusername"
$pass = "mypassword"
$invocation = (Get-Variable MyInvocation).Value
$localpath = Split-Path $invocation.MyCommand.Path
$YestDate = (Get-Date).AddDays(-2).ToString('yyMMdd') 
$remotefilepath = "/"
$localfilename = "C:\Users\database\Nightly_Files\file*.nightly.out."+$YestDate
$localfilelocation = "$localfilename"
$uri = New-Object System.Uri(“ftp://$server/$remotefilepath”)

#List of all files on FTP-Server
$files = Get-FTPDir $uri -credentials (New-Object System.Net.NetworkCredential($user, $pass))

foreach ($file in $files)
{    
   if ($file -eq "file1.nightly.out.$YestDate" -or 
       $file -eq "file2.nightly.out."+$YestDate -or
       $file -eq "file3.nightly.out."+$YestDate)
     {
        $file        
        $fileuri = New-Object System.Uri(“ftp://$server/$remotefilepath/$file”)               
        $webclient = New-Object System.Net.WebClient        
        $webclient.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
        $webclient.DownloadFile($fileuri, $localfilelocation       
        )
        
     }
    
}
echo 'download completed'  

DownloadFile如何知道如何處理您的星號? 您已經在$file變量中獲得了這些信息。 僅以文件夾路徑開頭,而不是完整的本地文件名:

$localfolder = "C:\Users\database\Nightly_Files\"

您也可以使用一個if而不是三個使用-like運算符:

if ($file -like "file[1-3].nightly.out.$YestDate")

並啟動下載連接本地路徑與文件名:

$webclient.DownloadFile($fileuri, "$localfolder$file")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM