ashish g
ashish g

Reputation: 291

How to check for functions dependency in powershell scripts. Avoid running the same function multiple times

In my PowerShell script - one function's output is another function's input.
For Eg: Function CreateReport($x) cannot run until unless the Function ParseXml($x) runs. What if a user directly runs the 2nd function before running the 1st.
How can I check if 1st function is already run to continue with 2nd, i.e, first run the 1st function (generate the txt file) then run the 2nd? if first func is already run do not re-run it.
For Eg: Suppose I have a TestFunc.ps1 file having 2 functions as below

$X = "C:\XmlPath\file1.xml"
Function ParseXml($X)
{
#Read xml and output contents in a txt file    
}

#This function should execute only after the function Parsexml($X) and if Pasrsexml() has run before and generated the output, it shouldnot be allowed to re-run here
Function CreateReport($T) 
{
#from the txtfile Create csv
}

Upvotes: 0

Views: 1156

Answers (3)

Roman Kuzmin
Roman Kuzmin

Reputation: 42063

According to this and your other question How to alias a parameterized function as a flag in powershell script? you are trying to implement a so called build script. Instead of inventing a wheel (implementing task dependencies, watching tasks to be run once, etc.) take a look at some already implemented tools like psake or Invoke-Build. They are designed for PowerShell and they do exactly what you want (run specified task sets, maintain task dependencies, run tasks once, etc.). These tools require a little bit of learning, of course, but in a long run they are worth to be learned.

Upvotes: 2

CB.
CB.

Reputation: 60938

If ParseXml function output a file, you can, in the CreateReport function, test for the existence of this file with Test-Path cmdlet:

if exists continue with CreateReport function else call the ParseXml function before continue.

Upvotes: 1

vonPryz
vonPryz

Reputation: 24071

Use a flag. Set the flag in ParseXml function and check it in the CreateReport function. If the flag isn't set, print an error and exit, othervise run the reporting code. Remember to clear the flag when the process is complete.

You can use a flag variable. For more persistent flags, consider using flag files or setting the flag in a database.

Upvotes: 0

Related Questions