Download and delete files from an FTP server, before logging activity locally

Tagged: 

This topic contains 5 replies, has 4 voices, and was last updated by Profile photo of Andrew Andrew 1 month, 3 weeks ago.

  • Author
    Posts
  • #62544
    Profile photo of Andrew
    Andrew
    Participant

    I was wondering if someone could help me to create PowerShell script please.

    The PowerShell script will run daily as a scheuled task and will need to do the following.

    1. Connect to an external FTP server. Its worth mentioning that I don't want credentials to be saved in the script itself as readable strings. Having looked in to this, it seems that this can be acheived by providing credentials which can then be saved to an XML file and encrypted

    Get-Credential | Export-Clixml -Path

    This will encrypt the username and password provided and place the credenitals in to an XML file. This encrypted file content can then be put in to a variable in the main script which can then be referenced without visually presenting the strings.

    2. Download files from a given directory on the FTP server to a local directory and renamed. The file names that will need to be targeted on the FTP server will adhere to a set naming convention that increments sequentially but be prefixed 'L6XQ'.

    3. The script will then need to check that the files have arrived in the local directory. Once it's confirmed that they have, the same files will need to be deleted from the FTP server.

    4. I would like the above processs to be recorded in to a text log file with timestamps if possible.

    5. A bonus would be some logic included in the script which could trigger an email to chosen users, listing the file or files that have been obtained.

    Can anyone advise or suggest some relevant articles/resources?

    Thanks

  • #62581
    Profile photo of Richard Diphoorn
    Richard Diphoorn
    Participant

    Hi Andrew, what did you tried yourself until now? Can you show us the code that you produced till now?

    Remark about the credential piece: yes you can do it, but only the user account that has generated the xml file with the credentials, is also the account that can retrieve those same credentials.

    • #62583
      Profile photo of Ron
      Ron
      Participant

      If I recall, its also only on the server where the file is generated? I think I read somewhere that both the user and server is part of the encryption.

  • #62587
    Profile photo of Andrew
    Andrew
    Participant

    Hi Richard

    I understand that when I use the Get-Credential | Export-Clixml -Path command to write credentials to the XML file that this will be tied to the user account which created the credentials. This is fine as the server that will be accesing the FTP site is constantly logged in and the account will be the same used to create the credentials.

    In terms of what I've tried already, nothing in practice as of yet, although Im setting up a WS2012R2 VM at home as a test box and will try out a few of the following methods later to see which suites best.

    I've not been able to find anything suitable yet for verifying that files have arrived, then deleting the files on the FTP seerver and logging, triggering a notification email

    #Reference the credentials created as mentioned before
    $MyCredential = Import-Clixml -Path "C:\Cred\PW.txt"
    $LocalDirectory = "C:\Parcel_Force_FTP\Received\"
    $PFFTP = "ftp//195.6.252.2/Out/L6XQ*.*"
    $WebClient = New-Object System.Net.WebClient
    $URI = New-Object System.Uri ($PFFTP)
    #Download the file to the Temp directory for naming
    $WebClient.DownloadFile ($URI,  $LocalDirectory)
    #Move the file to the Receive directory and change its name
    Move-Item "C:\Parcel_Force_FTP\Received\Temp\FileName (C:\Parcel_Force_FTP\Received\NewName{0:yyyMMdd}.txt" -f (Get-Date))
    

    Second method I looked at.

     $MyCredential = Import-Clixml -Path 'C:\Cred\PW.txt'
     $Source = 'FTP://192.168.0.17/FTP/NatWest/L6XQ*.*'
     $Destination = 'C:/Cred/Test1.txt'
     Invoke-WebRequest -URI  $Source -OutFile  $Destination -Credential $MyCredential
    

    I'm pretty new to PS so any guidance you could offer would be much appreciated.

    Thanks

  • #62592
    Profile photo of Daniel Krebs
    Daniel Krebs
    Participant

    Andrew,

    I found a PowerShell FTP Client module via Google which you might want to test. No need to reinvent the wheel if it works.

    https://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client-db6fe0cb

  • #62830
    Profile photo of Andrew
    Andrew
    Participant

    Hi Daniel

    I downloaded this module a couple of week ago but can;t seem to get my head around it. The help files are quite minimal.

    so far i have this

    
    
    $MyCredential = Import-Clixml -Path 'C:\Cred\PW.txt'
    $Session = 'NatWestFTPSession'
    $Source = 'FTP://192.168.0.17'
    $SourcePath = '/NatWest/L6XQ*'
    $Destination = 'C:/Cred/'
    $CheckFile = "C:\AdvWorks\MovieItemLog.txt"
    $FileExists = Test-Path $CheckFile
    Invoke-WebRequest -URI  $Source -OutFile  $Destination -Credential $MyCredential
    IF ($FileExists -eq $True) {}
    ELSE {}
    

    This gets the files I need and puts them in the local directory. I now just need something for the 'IF' block to say that if files are in the local directory and match a naming pattern, go out to the directory on the FTP server and delete the files.

    For instance the equivalent of

    IF ($FileExists -eq $True) {Remove-item -path $SourcePath -include L6XQ* -Force}
    

    But against an FTP server location

You must be logged in to reply to this topic.