如何在powershell脚本中检查函数依赖性。避免多次运行相同的功能

时间:2012-10-16 06:18:03

标签: function powershell

在我的PowerShell脚本中 - 一个函数的输出是另一个函数的输入。
对于Eg:函数CreateReport($ x)除非运行Function ParseXml($ x),否则无法运行。如果用户在运行1st之前直接运行第二个函数,该怎么办?
如何检查第一个函数是否已经运行以继续第二个,即首先运行第一个函数(生成txt文件)然后运行第二个函数?如果第一个func已经运行,请不要重新运行它。
例如:假设我有一个具有以下两个函数的TestFunc.ps1文件

$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
}

3 个答案:

答案 0 :(得分:2)

根据这个和你的另一个问题How to alias a parameterized function as a flag in powershell script?,你试图实现一个所谓的构建脚本。而不是发明轮子(实现任务依赖性,观察要运行一次的任务等),而不是查看一些已经实现的工具,如psakeInvoke-Build。它们是为PowerShell设计的,它们可以完全按照您的需要运行(运行指定的任务集,维护任务依赖性,运行一次任务等)。当然,这些工具需要一点点学习,但从长远来看,它们值得学习。

答案 1 :(得分:1)

如果ParseXml函数输出文件,您可以在CreateReport函数中使用Test-Path cmdlet测试此文件是否存在:

如果存在继续CreateReport函数,则在继续之前调用ParseXml函数。

答案 2 :(得分:0)

使用旗帜。在ParseXml函数中设置标志,并在CreateReport函数中进行检查。如果未设置标志,则输出错误并退出,其他运行报告代码。记得在流程完成后清除标记。

您可以使用标志变量。对于更持久的标志,请考虑使用标志文件或在数据库中设置标志。