Download most recent file from FTP using PowerShell

后端 未结 2 562
猫巷女王i
猫巷女王i 2021-01-13 01:19

I am working on a PowerShell script, which will pull files from an FTP site. The files are uploaded to the FTP site every hour so I need to download the most recent one. The

2条回答
  •  梦毁少年i
    2021-01-13 01:43

    I tried this, but i get an error:

    Error: Exception calling "ListDirectory" with "1" argument(s): "Error listing directory '/path/'.
    Could not retrieve directory listing
    Can't open data connection for transfer of "/path/"
    

    I read a lot about this problem on the internet, but could not find a solution which seemed fairly simple, and I am not a network setup wizard. So I choose a different approach. In our case the filename of the file which I want to automate the download for, has the date specified in it: backup_2018_08_03_020003_1048387.bak

    So we can get the file by using mget *2018_08_03* in a command line ftp session.

    Our backup procedure is run every morning at 01.00 AM, so we have a backup each day that we can fetch.

    Of course it would have been prettier and nicer to have a script that fetched the latest backup file based on the backup file timestamps, just in case that something went wrong with the latest backup or the backup file naming format changes. The script is just a script to fetch the backup for internal development purposes so its not a big deal if it breaks. I will look into this later and check whether i can make a cleaner solution.

    I made a batch script which just asks for todays backup file with the ordinary ftp command prompt scripting.

    It is important to get the formatting of todays date right. It must match the formatting of the date in the filename correctly.

    If you want to use the script you should replace the variables with your own information. You should also have write access to the directory where you run it from.

    This is the script that I made:

    @Echo Off
    Set _FTPServerName=xxx.xxx.xx.xxx
    Set _UserName=Username
    Set _Password=Password
    Set _LocalFolder=C:\Temp
    Set _RemoteFolder="/path/"
    Set _Filename=*%date:~-4,4%_%date:~-7,2%_%date:~-10,2%*
    Set _ScriptFile=ftptempscript
    :: Create script
     >"%_ScriptFile%" Echo open %_FTPServerName%
    >>"%_ScriptFile%" Echo %_UserName%
    >>"%_ScriptFile%" Echo %_Password%
    >>"%_ScriptFile%" Echo lcd %_LocalFolder%
    >>"%_ScriptFile%" Echo cd %_RemoteFolder%
    >>"%_ScriptFile%" Echo binary
    >>"%_ScriptFile%" Echo mget -i %_Filename%
    >>"%_ScriptFile%" Echo quit
    :: Run script
    ftp -s:"%_ScriptFile%"
    del "%_ScriptFile%"
    

提交回复
热议问题