Lancer 2 jobs en parallèle en powershell

Lancer simultanément 2 tâches avec powershell

Voici un exemple où on lance simultanément 2 tâches en powershell

$job1 = Start-Job -ScriptBlock { cmd.exe /c "dir D:\Appli > D:\Job1_out.txt" } # Démarrer un premier job
$job2 = Start-Job -ScriptBlock { cmd.exe /c "dir D:\Scripts > D:\Job2_out.txt" } # Démarrer un second job

# Attendre que les deux jobs soient terminés
Wait-Job -Job $job1, $job2

# Récupérer les résultats des jobs
$result1 = Receive-Job -Job $job1
$result2 = Receive-Job -Job $job2

# Afficher les résultats
$result1
$result2

# Nettoyer les jobs
Remove-Job -Job $job1, $job2
Lien vers le fichier : cliquez ici Copier le code

Vous pouvez voir les jobs en cours avec

get-job
Lien vers le fichier : cliquez ici Copier le code

Ou filtrer pour voir ceux en exécution avec

Get-Job | Where-Object { $_.State -eq 'Running' }
Lien vers le fichier : cliquez ici Copier le code

On peut aller plus loin et lancer par exemple autant de jobs qu'il n'y a de serveurs à traiter.
Ici D:\Liste_de_serveurs.csv est un csv qui contient le champ Serveur.
Pour chaque serveur on va la présence ou non du répertoire D:\groupes
Si le répertoire existe, on renseigne le nom du serveur dans D:\fichier_resultats.txt

$csv = Import-Csv -Path "D:\Liste_de_serveurs.csv" -Delimiter ";"
$jobs = @() #Création d'un tableau vide

Remove-Item -Path "D:\fichier_resultats.txt"

# Lancement de tous les jobs
ForEach ($Lignecsv in $csv) {
    $unjob = Invoke-Command -AsJob -ComputerName $Lignecsv.Serveur -ScriptBlock {
        Test-Path "D:\groupes" #Retourne $true ou $false
    }
    #On crée un objet $jobs qui référencie le job et le serveur associé
    $jobs += [PSCustomObject]@{
        Job = $unjob
        Serveur = $Lignecsv.Serveur
    }
}

# Attente de la fin de tous les jobs. $jobs.Job retourne tous les jobs
$jobs.Job | Wait-Job | Out-Null

# Traitement des résultats
ForEach ($item in $jobs) {
    $resultat = Receive-Job -Job $item.Job
   
    if ($resultat -eq $true) {
        Add-Content -Path "D:\fichier_resultats.txt" -Value $item.Serveur
    }
   
    # Nettoyage du job
    Remove-Job -Job $item.Job
}
Lien vers le fichier : cliquez ici Copier le code
Publicité