[PS] Meerdere Teams aanmaken met eigenaar en leden mbv csv

Pagina: 1
Acties:

Vraag


  • Vince22
  • Registratie: Februari 2005
  • Laatst online: 09:04
Voor een groot aantal leerlingen wil ik graag teams aanmaken met de bijbehorende docent als eigenaar van dat team
Ik heb een csv met daarin de volgende velden:
code:
1
2
3
4
5
6
leerling, klas, docent <-header
leering1, lesgroep1, docent1
leering2, lesgroep1, docent1
leering3, lesgroep1, docent1
leering1, lesgroep2, docent2
leering2, lesgroep2, docent2


Nu heb ik voor een andere import al een script gebouwd en iets aangepast en dit ziet er nu als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
$csv = import-csv c:\Temp\Teams\import.csv 
$csv | foreach-object {
  $TeamName = $_.klas
  $Teamowner = $_.docent
  $Teammember = $_.leerling
  $TeamDescription = $TeamName
  $group = New-Team -template EDU_class -DisplayName "$TeamName" -Description "$TeamDescription"
  Add-TeamUser -GroupId $group.GroupId -User "$Teamowner" -Role Owner
  Add-TeamUser -GroupId $group.GroupId -User "$Teammember" -Role Member
   }


Iemand die wél goed is in Powershell heeft uiteraard al gezien wat het probleem is, namelijk dat elke regel zorgt dat er een nieuw team wordt aangemaakt met de docent als eigenaar met als gevolg dat ik nu (volgens het voorbeeld) 3 teams genaamd lesgroep1 heb met als owner docent1 met elk 1 leerling en 2 teams genaam lesgroep 2....

Wat ik wil is dat 1 lesgroep 1 eigenaar heeft en dat alle leerlingen members worden van deze groep. Wat doe ik verkeerd? |:(

Sowieso schrijf je zo! https://www.onzetaal.nl/taalloket/sowieso

Alle reacties


  • itons
  • Registratie: Oktober 2003
  • Niet online
Filter je csv op unieke teams, maak de teams en en zoek dan de leerlingen bij de teams?

code:
1
2
3
4
5
6
7
8
9
10
$teamNamesAndOwners = $csv | Select-Object "klas","docent" -Unique

foreach ($team in $teamNamesAndOwners) {
    $group = New-Team -template EDU_class -DisplayName "$team"
    Add-TeamUser -GroupId $group.GroupId -User "$team.docent" -Role Owner
    $teamMembers = $csv | Where-Object {$_.klas -eq $team.klas}
    foreach ($member in $teamMembers.leerling) {
        Add-TeamUser -GroupId $group.GroupId -User "$member.leerling" -Role Member
    }
}

  • Vince22
  • Registratie: Februari 2005
  • Laatst online: 09:04
Zou het dan niet zoiets moeten zijn?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  $csv = import-csv c:\Temp\Teams\hv.csv 
  $teamNamesAndOwners = $csv | Select-Object "klas","docent" -Unique
  $team = $_.klas
  $teamowner = $_.docent
  
foreach ($team in $teamNamesAndOwners) {
    $group = New-Team -template EDU_class -DisplayName "$team"
    Add-TeamUser -GroupId $group.GroupId -User "$teamowner" -Role Owner 
    $teamMembers = $csv | Where-Object {$_.klas -eq $team.klas}
    foreach ($member in $teamMembers.leerling) {
        Add-TeamUser -GroupId $group.GroupId -User "$member" -Role Member
    }
}


Alleen als ik deze uitvoer krijg ik de melding:
code:
1
2
3
4
5
6
Add-TeamUser : Cannot bind argument to parameter 'User' because it is an empty string.
At line:8 char:48
+     Add-TeamUser -GroupId $group.GroupId -User "$teamowner" -Role Own ...
+                                                ~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-TeamUser], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.TeamsCmdlets.PowerShell.Custom.AddTeamUser


Ik heb het gevoel dat ik er bijna niet aan ontkom om 1 aparte csv te maken met alle teams + eigenaar en een csv met alle leerlingen met bijbehorende teams. Probleem is dan dat ik de GroupId moet zien te krijgen ipv de teamnaam.. En dan kom ik weer in een andere vraag terecht.

[ Voor 10% gewijzigd door Vince22 op 20-08-2020 12:58 ]

Sowieso schrijf je zo! https://www.onzetaal.nl/taalloket/sowieso


  • itons
  • Registratie: Oktober 2003
  • Niet online
Vince22 schreef op donderdag 20 augustus 2020 @ 12:45:
Zou het dan niet zoiets moeten zijn?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  $csv = import-csv c:\Temp\Teams\hv.csv 
  $teamNamesAndOwners = $csv | Select-Object "klas","docent" -Unique
  $team = $_.klas
  $teamowner = $_.docent
  
foreach ($team in $teamNamesAndOwners) {
    $group = New-Team -template EDU_class -DisplayName "$team"
    Add-TeamUser -GroupId $group.GroupId -User "$teamowner" -Role Owner 
    $teamMembers = $csv | Where-Object {$_.klas -eq $team.klas}
    foreach ($member in $teamMembers.leerling) {
        Add-TeamUser -GroupId $group.GroupId -User "$member" -Role Member
    }
}
Regel 3-4 zijn sowieso niet nodig, haal die enes weg en kijk goed naar mijn voorbeeld waar de waardes voor $team en $teamowner vandaan komen. Je moet dit gewoon even debuggen in VSCode, kijken wat de waardes zijn op welk punt in je script.

Acties:
  • 0 Henk 'm!

  • _360_
  • Registratie: Januari 2011
  • Laatst online: 18-09 21:29
Je kan je code korter en wat meer powershellesque maken door hier GroupBy te gebruiken.

Zoiets als dit zou moeten werken. :)

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$schoolTeams = Import-CSV c:\Temp\Teams\import.csv `
    | Group-Object -Property klas, docent `
    | %{ ([PsCustomObject]@{
        TeamName = $_.Name.Split(',')[0]; 
        Owner = $_.Name.Split(',')[1]; 
        Members = ($_.Group | Select-Object -exp leerling) }) }

foreach ($schoolTeam in $schoolTeams) {

  $team = New-Team -template EDU_class `
      -DisplayName $schoolTeam.TeamName `
      -Description $schoolTeam.TeamName
  
  Add-TeamUser -GroupId $team.GroupId -User $schoolTeam.Owner -Role Owner
  $schoolTeam.Members | %{ Add-TeamUser -GroupId $team.GroupId -User $_ -Role Member }
}

[ Voor 3% gewijzigd door _360_ op 21-08-2020 01:53 ]