Powershell: add a user to multiple groups

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Beste,

Ik heb geprobeerd een gebruiker aan meerdere groepen te koppelen vanuit een .csv-bestand alleen is dit niet echt gelukt? Weet een van u waar ik het fout doe? Ik dank u alvast voor de moeite

CSV-bestand
Afbeeldingslocatie: https://www.mupload.nl/img/emmt2alyxjhrn.png

PS Code
$CSV = "Gebruikers.csv"
$users = Import-Csv $CSV –delimiter ";"

Foreach user in users ... begin

$username = 'Dit is gewoon Account Logon Name... waar users mee inloggen'
$check = of de user al bestaat ... niet relevant hier ...

[Hier komt veel meer details bij kijken bij het importeren van meerdere gebruikers zoals homefolder, userprofile etc. maar die zijn nu niet relevant...]

if($check -eq $false) {
New-ADUser etc...
Add-ADGroupMember $user.GroupName $username
}

Foreach ... einde

[ Voor 26% gewijzigd door ExcelFreak op 19-10-2017 22:10 ]


Acties:
  • +1 Henk 'm!

  • heuker
  • Registratie: Februari 2002
  • Nu online
Kolom C wordt als 1 string gezien. Je zult deze moeten splitten op basis van de komma en dan een foreach doen waarbinnen je add-adgroupmember aanroept.

Dus een dubbele foreach.

Acties:
  • 0 Henk 'm!

  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Dus zou ik dan Add-ADGroupMember 2x moeten gebruiken? Bij de 1e zonder split en bij de 2e met split of zo? Zou u misschien een voorbeeld kunnen geven?
heuker schreef op woensdag 18 oktober 2017 @ 23:45:
Kolom C wordt als 1 string gezien. Je zult deze moeten splitten op basis van de komma en dan een foreach doen waarbinnen je add-adgroupmember aanroept.

Dus een dubbele foreach.

Acties:
  • 0 Henk 'm!

  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Wat ik nu heb is:
1e foreach($user in $users)
new-aduser etc...

2e (binnen de eerste)
foreach($group in $users) {
Add-ADGroupMember ($group.GroupName).split(",") $username
}

Maar dit lukt nog steeds niet ...

Acties:
  • 0 Henk 'm!

  • heuker
  • Registratie: Februari 2002
  • Nu online
Nee je moet de kolom splitten binnen de 1e foreach en de gesplitte array gebruiken om nog een foreach te doen.

Zoiets:

$CSV = "Gebruikers.csv"
$users = Import-Csv $CSV –delimiter ";"

foreach ($user in $users) {

$user.GroupName.split(",") | foreach {

Add-ADGroupMember $_.GroupName $username

}

}

Acties:
  • 0 Henk 'm!

  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Dat werkt ook niet :(, hieronder de error:
Afbeeldingslocatie: https://www.mupload.nl/img/jkm3jf4oca115.png


PS moet er achter de foreach niet iets tussen '(..)' komen? er staan geen haakjes in de code die je als voorbeeld hebt gesteld?
heuker schreef op donderdag 19 oktober 2017 @ 16:11:
Nee je moet de kolom splitten binnen de 1e foreach en de gesplitte array gebruiken om nog een foreach te doen.

Zoiets:

$CSV = "Gebruikers.csv"
$users = Import-Csv $CSV –delimiter ";"

foreach ($user in $users) {

$user.GroupName.split(",") | foreach {

Add-ADGroupMember $_.GroupName $username

}

}

Acties:
  • 0 Henk 'm!

  • heuker
  • Registratie: Februari 2002
  • Nu online
ExcelFreak schreef op donderdag 19 oktober 2017 @ 22:00:
PS moet er achter de foreach niet iets tussen '(..)' komen? er staan geen haakjes in de code die je als voorbeeld hebt gesteld?
Nee, als je een array (gesplitte string in dit geval) piped naar een foreach dan kun je direct de curly brackets gebruiken. Je dient daarbinnen dan naar het huidige object te refereren door '$_' te gebruiken. Je hoeft dus niet persé een naam te geven ($group in $groups o.i.d.)

Je post je code niet, maar probeer als je geneste foreach loops lastig vindt d.m.v. write-host wat meer op het scherm te tonen zodat je ziet wat er gebeurt.

ik heb de code nog even door ISE gehaald:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$CSV = "C:\Temp\Gebruikers.csv"
$users = Import-Csv $CSV -delimiter ","

foreach ($user in $users) {

    Write-Host $user.Name

    $user.GroupName.split(",") | foreach {

        Write-Host "`t$_"  # schrijft huidige object weg, dus in dit geval één van de gesplitte groups, $_ is dus nu je groupname
        #Add-ADGroupMember $_ $user.Name

    }

}

Acties:
  • +2 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 09:49
ExcelFreak schreef op donderdag 19 oktober 2017 @ 22:00:
Dat werkt ook niet :(, hieronder de error:
[afbeelding]


PS moet er achter de foreach niet iets tussen '(..)' komen? er staan geen haakjes in de code die je als voorbeeld hebt gesteld?


[...]
Er zit een verschil tussen het keyword foreach en de cmdlet Foreach-Object (welke ForEach als alias heeft).
Beide werken op een andere manier, vooral met hoe data de pipelin in gaat. De syntax voor het keyword is
PowerShell:
1
2
3
4
foreach ($item in $collection)
{
code voor de loop
}


De Cmdlet heeft de volgende syntax :
PowerShell:
1
2
3
Foreach-Object {code voor de loop}
## Dit werkt ook
foreach {code voor de loop}

De laatste lijkt op het keyword, maar Powershell zal deze interpreteren als alias voor Foreach-Object in dit geval. Dit is trouwens één van de grootste valkuilen bij beginnende Powershellers. Vooral omdat je bij Foreach-Object $_ gebruikt om het huidige object binnen de pipe te benaderen. Bij een foreach via het keyword definieer jij de tijdelijke variable (in mijn voorbeeld $item)

het keyword foreach is qua performance trouwens superieur tegenover Foreach-Object (en veel flexibeler).

Acties:
  • 0 Henk 'm!

  • ExcelFreak
  • Registratie: Augustus 2017
  • Laatst online: 04-03-2022
Ik zal kijken of dit lukt

[ Voor 20% gewijzigd door ExcelFreak op 26-10-2017 09:08 ]

Pagina: 1