我从主脚本调用一系列PowerShell函数(每个函数都是一个测试)。 我在XML文件中指定测试,我希望它们按顺序运行。
要调用的函数在PowerShell模块文件(.psm1)中进行组织。主脚本根据需要调用Import-Module,然后通过类似的东西调用该函数......
$newResults = & "$runFunction" @ARGS
或者这......
$newResults = Invoke-Expression $runFunctionWithArgs
我已经完成了两项工作,XML文件解析以正确的顺序调用这些命令。
问题:测试显然是异步启动的,因此在调用第二个测试之前,我启动的第一个测试不一定会被调用和完成。
注意,测试是PowerShell模块中的函数,而不是命令,所以我认为Start-Process不会起作用(但请告诉我你是否知道如何使用)。
更多详情: 添加所有代码需要花费太多,但实际上每个函数调用的作用是创建一个带有一个或多个“TestResult”对象的哈希表。 “TestResult”包含成功代码和TimeStamp。每个测试都会花费不同的时间,但都是同步的。我希望时间戳与我调用每个测试的顺序相同,特别是因为每个测试所做的第一件事就是得到时间戳,所以它不应该取决于测试的作用。当我在ISE中运行时,一切都按顺序进行。当我在命令窗口中运行时,时间戳与我预期的订单不匹配。
解决方法: 我的工作理论仍然是PowerShell以某种方式并行化调用。我可以通过调用每个调用依赖于前一个调用的结果来获得一致的结果。这是一个虚拟检查,因为我知道我测试的内容将永远是真的,但PowerShell不知道
if ($newResults.Count -ne [Long]::MaxValue) { $newResults = & "$runFunction" @ARGS }
PowerShell认为它需要知道之前的呼叫计数是否不是MaxValue。