如何等待直到每个文件在PowerShell中创建?



我使用下面的脚本调用API来创建一堆日志文件。它循环遍历文本文件中的所有第一项和第二项(与CMD中定义令牌的方式相同)。

$linesXmls = @(Get-Content -Path "$path") -Replace " "
ForEach($line in $lines) {
$s = $line -split ","
$var1s = $s[0]
$var2s = $s[1]
Start-Process -FilePath $APIpath -ArgumentList "$argument1", "$argument2", "$argument3", "$pathfolder$var2s.log"
}

然而,这并没有等到文件创建后才执行下一个语句,导致我的脚本失败。是否有办法在创建每个$var2s日志文件之前等待?

Start-Process异步的,因为它指示操作系统创建并启动一个新进程,然后立即返回——一个经典的"着火后忘记";机制。

由于这个原因,您可能会看到多个进程同时运行,这可能会捕获访问共享文件资源的问题。

为了防止这种竞争条件,使用-Waitswith参数和Start-Process来强制它等待,直到结果进程退出,直到返回:

$linesXmls = @(Get-Content -Path "$path") -Replace " "
ForEach($line in $lines) {
$s = $line -split ","
$var1s = $s[0]
$var2s = $s[1]
Start-Process -FilePath $APIpath -ArgumentList "$argument1", "$argument2", "$argument3", "$pathfolder$var2s.log" -Wait
}

最新更新