Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 计算正在运行的脚本数并等待它们完成_Powershell_Batch File - Fatal编程技术网

Powershell 计算正在运行的脚本数并等待它们完成

Powershell 计算正在运行的脚本数并等待它们完成,powershell,batch-file,Powershell,Batch File,我正在寻找计算当前正在运行的PowerShell脚本数量的最佳方法 我从windows批处理文件运行.ps1脚本。我现在正在编写的脚本是在从客户端收到特定电子邮件时启动的,但我希望此脚本首先检查当前是否没有其他脚本正在忙于运行,如果是,则必须等待它们完成后才能继续 我相信有几种方法可以做到这一点,但最安全的方法是什么?我还在学习。如果可以从批处理文件转移到启动PowerShell,那么我建议使用启动脚本。这将允许您使用等待进程退出,并过滤尚未完成的脚本 因此,您的脚本可能如下所示: # crea

我正在寻找计算当前正在运行的PowerShell脚本数量的最佳方法

我从windows批处理文件运行.ps1脚本。我现在正在编写的脚本是在从客户端收到特定电子邮件时启动的,但我希望此脚本首先检查当前是否没有其他脚本正在忙于运行,如果是,则必须等待它们完成后才能继续


我相信有几种方法可以做到这一点,但最安全的方法是什么?我还在学习。

如果可以从批处理文件转移到启动PowerShell,那么我建议使用启动脚本。这将允许您使用等待进程退出,并过滤尚未完成的脚本

因此,您的脚本可能如下所示:

# create a loop 
foreach ($item in $reasontoloop) {

    $arguments = "define script names and arguments"

    # Start the powershell script
    $procs += Start-Process powershell -PassThru  -argumentlist $arguments
}

Write-Host -message "Waiting for Processes to complete" 
while( $procs | Where-Object { $_.hasExited -eq $false } )
{
    # Display progress
    $measureInfo = $procs | Where-Object { $_.hasExited -eq $true } | Measure-Object
    write-host "$($measureInfo.count) of $($procs.Length) still running" 

    Start-Sleep 1
}
Write-Host -message "Processes complete" 
如果您只是对正在执行的PowerShell实例的数量感兴趣,那么下面使用的一行代码将有所帮助

@(Get-Process | where-object {$_.ProcessName -like 'powershell'}).count

我想我将使用一个线性程序-我可以使用它循环,直到没有其他PowerShell脚本运行,然后继续。