在我的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
}
答案 0 :(得分:2)
根据这个和你的另一个问题How to alias a parameterized function as a flag in powershell script?,你试图实现一个所谓的构建脚本。而不是发明轮子(实现任务依赖性,观察要运行一次的任务等),而不是查看一些已经实现的工具,如psake或Invoke-Build。它们是为PowerShell设计的,它们可以完全按照您的需要运行(运行指定的任务集,维护任务依赖性,运行一次任务等)。当然,这些工具需要一点点学习,但从长远来看,它们值得学习。
答案 1 :(得分:1)
如果ParseXml
函数输出文件,您可以在CreateReport
函数中使用Test-Path
cmdlet测试此文件是否存在:
如果存在继续CreateReport
函数,则在继续之前调用ParseXml
函数。
答案 2 :(得分:0)
使用旗帜。在ParseXml
函数中设置标志,并在CreateReport
函数中进行检查。如果未设置标志,则输出错误并退出,其他运行报告代码。记得在流程完成后清除标记。
您可以使用标志变量。对于更持久的标志,请考虑使用标志文件或在数据库中设置标志。