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
Ou filtrer pour voir ceux en exécution avec
Get-Job | Where-Object { $_.State -eq 'Running' }
Lien vers le fichier : cliquez ici
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
Publicité
Article(s) en relation(s)