0

在我的 PowerShell 脚本中 - 一个函数的输出是另一个函数的输入。
例如:除非函数 ParseXml($x) 运行,否则函数 CreateReport($x) 无法运行。如果用户在运行第一个函数之前直接运行第二个函数怎么办。
如何检查第一个函数是否已经运行以继续第二个函数,即首先运行第一个函数(生成 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
}
4

3 回答 3

2

根据这个和你的其他问题如何将参数化函数别名为powershell脚本中的标志?您正在尝试实现所谓的构建脚本。与其发明轮子(实现任务依赖,观察任务运行一次等),不如看看一些已经实现的工具,比如psakeInvoke-Build。它们是为 PowerShell 设计的,它们完全符合您的要求(运行指定的任务集、维护任务依赖项、运行一次任务等)。当然,这些工具需要一点学习,但从长远来看,它们是值得学习的。

于 2012-10-16T08:51:43.953 回答
1

如果ParseXml函数输出一个文件,您可以在函数中使用cmdletCreateReport测试该文件是否存在:Test-Path

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

于 2012-10-16T07:18:26.890 回答
0

使用旗帜。在函数中设置标志并在ParseXml函数中检查它CreateReport。如果未设置标志,则打印错误并退出,否则运行报告代码。请记住在该过程完成后清除标志。

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

于 2012-10-16T06:45:15.093 回答