Question
Tirage 3 personnes aléatoirement
- powershelltraining
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 7 ans 10 mois #25404
par powershelltraining
Tirage 3 personnes aléatoirement a été créé par powershelltraining
Bonjour,
J'aimerai créer un script permettant de créer des groupes composés de 3 personnes au hasard et les afficher en sortie.
Pour l'instant, j'ai fais ça qui permet d'afficher des personnes au hasard mais je bloque... D'ailleurs le dernier prénom de mon tableau il n'y a que la première lettre qui s'affiche à chaque fois, je ne comprends pas pourquoi.
Je pensais faire une boucle de 1 à 3 et affecter au fur et à mesure 3 personnes aux groupes, mais je bloque toujours... j'aurai besoin de pistes.
Merci d'avance.
===============================
[code:1]#creation du tableau
$personSelected = @()
$personSelected += \"Paul\"
$personSelected += \"Pierre\"
$personSelected += \"Jack\"
$personSelected += \"Marc\"
$personSelected += \"Luc\"
$personSelected += \"Camille\"
$personSelected += \"Karine\"
$personSelected += \"Lucie\"
$personSelected += \"Pauline\"
$personSelected += \"Sophie\"
$personSelected += \"Celine\"
$personSelected += \"Erica\"
$length = $personSelected.Length
for ($i=$length; $i -ge 0; $i--)
{
if($i -eq 0)
{
return \"FINI\";
}
$nb= get-random -maximum $i
Write-Host $personSelected[$nb]
$personSelected = $personSelected | Where-Object { $_ -ne $personSelected[$nb] }
$i
}
[/code:1]
Message édité par: powershelltraining, à: 22/05/18 12:39
Message édité par: Arnaud, à: 22/05/18 13:31<br><br>Message édité par: Arnaud, à: 30/05/18 09:21
J'aimerai créer un script permettant de créer des groupes composés de 3 personnes au hasard et les afficher en sortie.
Pour l'instant, j'ai fais ça qui permet d'afficher des personnes au hasard mais je bloque... D'ailleurs le dernier prénom de mon tableau il n'y a que la première lettre qui s'affiche à chaque fois, je ne comprends pas pourquoi.
Je pensais faire une boucle de 1 à 3 et affecter au fur et à mesure 3 personnes aux groupes, mais je bloque toujours... j'aurai besoin de pistes.
Merci d'avance.
===============================
[code:1]#creation du tableau
$personSelected = @()
$personSelected += \"Paul\"
$personSelected += \"Pierre\"
$personSelected += \"Jack\"
$personSelected += \"Marc\"
$personSelected += \"Luc\"
$personSelected += \"Camille\"
$personSelected += \"Karine\"
$personSelected += \"Lucie\"
$personSelected += \"Pauline\"
$personSelected += \"Sophie\"
$personSelected += \"Celine\"
$personSelected += \"Erica\"
$length = $personSelected.Length
for ($i=$length; $i -ge 0; $i--)
{
if($i -eq 0)
{
return \"FINI\";
}
$nb= get-random -maximum $i
Write-Host $personSelected[$nb]
$personSelected = $personSelected | Where-Object { $_ -ne $personSelected[$nb] }
$i
}
[/code:1]
Message édité par: powershelltraining, à: 22/05/18 12:39
Message édité par: Arnaud, à: 22/05/18 13:31<br><br>Message édité par: Arnaud, à: 30/05/18 09:21
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 10 mois #25406
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Powershell script
Hello hello !!
Ton besoin est un excellent exercice sur la manipulation des tableaux
Voilà ma solution : A chaque itération (choix aléatoire de 3 personnes) on retire du tableau de départ les personnes selectionnées et on recommence.
Pour se faire il faut utiliser un tableau de type ArrayList car celui-ci possède une méthode Remove() qui est très pratique pour retirer des éléments; chose qui n'est pas possible avec un tableau classique en PowerShell.
[code:1]
[System.Collections.ArrayList]$tbPers = 'Paul', 'Pierre', 'Jack', 'Marc', 'Luc', 'Camille', 'Karine', 'Lucie', 'Pauline', 'Sophie', 'Celine', 'Erica'
0..2 | foreach -Begin {$gr=@{}} -Process { $selection = $tbPers | Get-Random -Count 3; $gr[$_] = $selection; $selection | foreach {$tbPers.remove($_)} }
[/code:1]
0..2 | foreach {..} permet de faire boucler 3 fois. C'est une façon courante de procéder en PowerShell car c'est plus simple qu'une boucle for.
Le résultat sera stocké dans la table de hachage $gr.
[code:1]
PS C:\> $gr
Name Value
----
2 {Paul, Pierre, Karine}
1 {Marc, Sophie, Jack}
0 {Lucie, Pauline, Camille}
[/code:1]
Ton besoin est un excellent exercice sur la manipulation des tableaux
Voilà ma solution : A chaque itération (choix aléatoire de 3 personnes) on retire du tableau de départ les personnes selectionnées et on recommence.
Pour se faire il faut utiliser un tableau de type ArrayList car celui-ci possède une méthode Remove() qui est très pratique pour retirer des éléments; chose qui n'est pas possible avec un tableau classique en PowerShell.
[code:1]
[System.Collections.ArrayList]$tbPers = 'Paul', 'Pierre', 'Jack', 'Marc', 'Luc', 'Camille', 'Karine', 'Lucie', 'Pauline', 'Sophie', 'Celine', 'Erica'
0..2 | foreach -Begin {$gr=@{}} -Process { $selection = $tbPers | Get-Random -Count 3; $gr[$_] = $selection; $selection | foreach {$tbPers.remove($_)} }
[/code:1]
0..2 | foreach {..} permet de faire boucler 3 fois. C'est une façon courante de procéder en PowerShell car c'est plus simple qu'une boucle for.
Le résultat sera stocké dans la table de hachage $gr.
[code:1]
PS C:\> $gr
Name Value
----
2 {Paul, Pierre, Karine}
1 {Marc, Sophie, Jack}
0 {Lucie, Pauline, Camille}
[/code:1]
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.035 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Tirage 3 personnes aléatoirement