How to make my script check if the file exist, then stop script if it does not exist.

Advertisement

MARTiN95
Joined:
Posts:
5
Location:
Sweden

How to make my script check if the file exist, then stop script if it does not exist.

Hello!

Im using Powershell + WinSCPnet.dll in order to automate a file download.
Problem is that its not everyday that a file gets uploaded.

The script itself works fine with downloading the file, moving existing file to another folder and renaming it but i want the script to check if the file exist.

If the file exist i want the script to keep going.
If the files does not exist i want the script to abort.

Could anybody help me with this?

Last edited by MARTiN95 on 2019-02-18 14:20; edited 1 time in total

Reply with quote E-mail

Advertisement

MARTiN95
Joined:
Posts:
5
Location:
Sweden

EDIT: Just found out that this wont work with wildcard, any1 that could help me out?

Ive managed to get the filecheck almost in order.
The filecheck works, but not for wildcard.

The script im working on is very long, this is the Filecheck part.

 if ($session.FileExists($remotePath))
        {
            Write-Host "File $remotePath exists"
            # Now you can e.g. download file using session.GetFiles
 
            exit 0
        }
        else
        {
            Write-Host "File $remotePath does not exist"
            exit 1
        }
    }

$remotePath = "/file/FromIEC/*"

Also tried with:
$remotePath = "/file/FromIEC/*.*"
$remotePath = "/file/FromIEC/*.csv"
$remotePath = "/file/FromIEC/NameOfFile.csv" <-- This works, not wildcard.

Reply with quote E-mail

MARTiN95
Joined:
Posts:
5
Location:
Sweden

Re: How to make my script check if the file exist, then stop script if it does not exist.

martin wrote:

Why do you even need the check? Why don't simply call the Session.GetFiles with your file mask?

Anyway, see https://winscp.net/eng/docs/script_checking_file_existence#net

This is how the setup is right now.
Customer has a thirdparty that sends a .csv file to a SFTP Server
Customer wants the .csv file to be put in a folder called C:\Scripts\CSV
If a new file comes in, the old file gets renamed to FILENAME-$Filedate.csv and moved to C:\Scripts\CSV\Imported

However, if theres no files to be downloaded the original file should stay in C:\Scripts\CSV
Im struggling however to use the

if ($session.FileExists($remotePath))
I cant get the path to work correctly, ive tried with "FILE/PATH/*.csv" but i cant get it to recognize the file.

Reply with quote E-mail

martin
Site Admin
martin avatar
Joined:
Posts:
31,609
Location:
Prague, Czechia

Re: How to make my script check if the file exist, then stop script if it does not exist.

MARTiN95 wrote:

Customer wants the .csv file to be put in a folder called C:\Scripts\CSV
If a new file comes in, the old file gets renamed to FILENAME-$Filedate.csv and moved to C:\Scripts\CSV\Imported
So download *.csv. And if anything gets actually downloaded, archive the previous version of the file.

if ($session.FileExists($remotePath))
I cant get the path to work correctly, ive tried with "FILE/PATH/*.csv" but i cant get it to recognize the file.
Anyway, to answer your question:
You cannot use Session.FileExists with a file mask.
But you can use Session.EnumerateRemoteFiles. See:
https://winscp.net/eng/docs/script_checking_file_existence

Reply with quote

Advertisement

MARTiN95
Joined:
Posts:
5
Location:
Sweden

Okey, i got this working and the powershell script is enumerating the files.
So i get an reply saying this and this file exist,

How would i proceed with this?

This is how my code looks like right now
Removed some info due to privacy

$getscriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $getscriptpath
cd $dir

$fileDate = get-date -f yyyy-MM-dd:HH:mm

$oldfile = "$dir\REMOVED.csv"
$newfile = "$dir\REMOVED\REMOVED-$fileDate.csv"
$remotepath = "/REMOVED/REMOVED/"

    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
 
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "SERVER"
        UserName = "USER"
        Password = "PASSWORD"
        SshHostKeyFingerprint = "KEY"
    }
 
    $session = New-Object WinSCP.Session

     
   try
   {
      $session.Open($sessionOptions)
        $Session.EnumerateRemoteFiles($Remotepath, "*", [WinSCP.EnumerationOptions]::None)
        }
        Finally
        {
        }
  
   

Reply with quote E-mail

Advertisement

You can post new topics in this forum