powershell active directory

AD users toevoegen

Leerdoelen

  • Leren een nieuwe user toevoegen.
  • Leren hoe je controleert of een user bestaat.

Binnen Active Directory hebben we gebruikers nodig. Deze kunnen we gelukkig vrij makkelijk aanmaken via PowerShell.

Toevoegen gebruiker

Voor het toevoegen van gebruikers gebruiken we het commando New-ADUserVia deze link kan je meer te weten komen over dit commandoLinks to an external site..
Natuurlijk moeten we ook dingen mee gaan geven aan dit commando, anders hebben we er niks aan. We willen eigenlijk altijd een naam, displaynaam, samaccountnaam, wachtwoord en of deze aanstaat meegeven. Als we een voorbeeldgebruiker aanmaken ziet dat er als volgt uit:

New-ADUser -name "Folkert Attema" 
-AccountPassword (ConvertTo-SecureString -AsPlainText "W@chtw00rd" -Force)
-DisplayName "Folkert Attema" -SamAccountName "attema" -Enabled $true

Je kan om het commando makkelijker weg te typen gebruik maken van het volgende teken: ` hiermee kan je op enter drukken en krijg je een extra regel voordat er iets uitgevoerd wordt.

Bij het toevoegen van een nieuwe gebruiker aan Active Directory (AD) zijn er verschillende belangrijke gegevens die je moet opgeven. Deze gegevens zijn nodig om de gebruiker correct te identificeren, te authenticeren en te autoriseren binnen het netwerk. Hier zijn de belangrijkste gegevens die je meestal moet invullen:

1. Gebruikersnaam (sAMAccountName)

  • Beschrijving: Dit is de unieke loginnaam van de gebruiker binnen het domein. Het wordt ook wel de “samAccountName” genoemd. Dit is de naam die de gebruiker gebruikt om in te loggen.
  • Voorbeeldjdoe of janedoe

2. Volledige naam (Full Name / Display Name)

  • Beschrijving: Dit is de naam van de gebruiker zoals deze wordt weergegeven in Active Directory en andere services zoals het adresboek in Microsoft Outlook.
  • VoorbeeldJane Doe

3. Wachtwoord

  • Beschrijving: Het wachtwoord dat de gebruiker moet gebruiken om toegang te krijgen tot zijn account. Dit wachtwoord moet voldoen aan de domein-wachtwoordbeleid (bijvoorbeeld lengte, complexiteit).
  • Opmerking: Soms moet het wachtwoord bij de eerste aanmelding worden gewijzigd.

Voorbeeld PowerShell commando om wachtwoord te instellen:

$Password = Read-Host "Voer wachtwoord in" -AsSecureString

4. Voornaam en Achternaam (GivenName / Surname)

  • Beschrijving: De voor- en achternaam van de gebruiker, gebruikt voor identificatie in verschillende systemen en applicaties.
  • Voorbeeld:
    • Voornaam: Jane
    • Achternaam: Doe

5. Organisatorische eenheid (OU)

  • Beschrijving: De organisatorische eenheid waarin de gebruiker geplaatst wordt. Dit bepaalt onder andere welke groepsbeleid-instellingen (Group Policies) op de gebruiker van toepassing zijn.
  • VoorbeeldOU=Gebruikers,OU=HR,DC=bedrijf,DC=com

6. Lidmaatschap van groepen (Group Memberships)

  • Beschrijving: De groepen waartoe de gebruiker behoort. Dit bepaalt onder andere de rechten en toegangsniveaus die de gebruiker heeft binnen het netwerk.
  • VoorbeeldDomain UsersHR Department

7. E-mailadres (mail)

  • Beschrijving: Het e-mailadres van de gebruiker. Dit wordt gebruikt voor e-mailcommunicatie en integratie met andere systemen zoals Exchange of Office 365.
  • Voorbeeld[email protected]

Gebruiker controleren

We hebben nu onze eerste gebruiker aangemaakt, maar we willen natuurlijk even kijken of hij bestaat. We kunnen hiervoor het commando Get-ADUser gebruiken.
Als we de gebruiker van net op willen vragen gebruiken we Get-ADUser -Identity attema

AD users aanpassen

Je kunt een gebruiker in Active Directory (AD) aanpassen met behulp van PowerShell en de cmdlet Set-ADUser. Dit commando stelt je in staat om verschillende eigenschappen van een gebruiker aan te passen. Om de cmdlet te gebruiken, moet je de Active Directory-module voor PowerShell geïnstalleerd hebben op je systeem.

Hieronder vind je enkele voorbeelden van hoe je verschillende eigenschappen van een gebruiker kunt aanpassen met PowerShell:

1. Een enkele eigenschap aanpassen

Stel, je wilt de telefoonnummer (PhoneNumber) van een gebruiker wijzigen:

Set-ADUser -Identity "gebruikersnaam" -PhoneNumber "123-456-7890"

In dit voorbeeld is "gebruikersnaam" de sAMAccountName, Distinguished Name (DN) of GUID van de gebruiker die je wilt aanpassen, en "123-456-7890" is het nieuwe telefoonnummer.

2. Meerdere eigenschappen tegelijk aanpassen

Je kunt meerdere eigenschappen tegelijk aanpassen door ze toe te voegen aan het commando. Bijvoorbeeld, als je zowel de afdeling als het kantoor wilt aanpassen:

Set-ADUser -Identity "gebruikersnaam" -Department "IT" -Office "Amsterdam"

Dit zal de afdeling van de gebruiker instellen op “IT” en het kantoor op “Amsterdam”.

3. Een attribuut leegmaken (null of verwijderen)

Als je een attribuut wilt leegmaken of verwijderen, kun je de parameter -Clear gebruiken. Bijvoorbeeld, om het telefoonnummer te verwijderen:

Set-ADUser -Identity "gebruikersnaam" -Clear PhoneNumber

4. Wachtwoord instellen of resetten

Om het wachtwoord van een gebruiker te resetten:

Set-ADAccountPassword -Identity "gebruikersnaam" -NewPassword (ConvertTo-SecureString -AsPlainText "NieuwWachtwoord123!" -Force)

Vervolgens kun je ervoor zorgen dat de gebruiker het wachtwoord bij de volgende aanmelding moet wijzigen:

Set-ADUser -Identity "gebruikersnaam" -ChangePasswordAtLogon $true

AD users importeren en exporteren

Bij Active Directory is het erg handig als wij een lijst met gebruikers kunnen importeren en exporteren, zodat alles netjes bijgehouden kan worden (denk aan overnames, migraties, etc.)


Importeren uit CSV

We kunnen gebruikers uit een CSV-bestand importeren. Hiervoor hebben we de volgende commando’s nodig: Import-Csv. Bij dit commando hoeven we alleen maar het pad mee te geven naar ons CSV-bestand. Dus bijvoorbeeld: Import-Csv “~\Downloads\backup_ad_users.csv”

Deze import slaan we op in een variabele en gebruiken we dan weer verder. In PowerShell is alles een object en wat we opslaan is eigenlijk een array aan objecten waarbij hij uit het CSV-bestand netjes de eigenschappen kan matchen met de kolomnamen. We gaan dan een foreach gebruiken en het splatting van de vorige les om makkelijk zo aan onze gebruikers te komen. We kunnen hierbij alles direct invoegen maar ook bepaalde dingen selecteren.

Hieronder volgt een wat groter blokje code waarbij de belangrijkste dingen zijn: Het CSV-bestand wordt geïmporteerd, een aantal velden worden geselecteerd en er wordt een Hashtable gemaakt via wat complexere code (zodat we dit niet handmatig hoeven te doen) zodat we deze kunnen splatten.

$users = Import-Csv $csvFile | Select-Object SamAccountName, ChangePasswordAtLogon, Name, DisplayName, Description, Company, Title, City, AccountPassword
foreach($user in $users){
  $hashtable = @{}
  $user | Get-Member -MemberType Properties | ForEach-Object { $hashtable[$_.Name] = $user.$($_.Name) }
  $hashtable["Enabled"] = $false
  New-ADUser @hashtable
}

Exporteren naar CSV

Het exporteren naar een CSV-bestand gaat een stuk makkelijker, daar hoeven we maar een paar commando’s aan elkaar te knopen via de pipeline.
We hebben Get-ADUser nodig (net zoals we een losse gebruiker konden opvragen), Select-Object om specifieke dingen te kiezen (optioneel) en Export-Csv.
Voor het ophalen van alles van alle gebruikers voeren we dit commando uit: Get-ADUser -Filter * -Properties * | Export-Csv users.csv
Voor het ophalen van alleen de namen van alle gebruikers voeren we dit commando uit: Get-ADUser -Filter * -Properties * | Select-Object Name | Export-Csv users.csv

Exit (Script Stoppen)

In PowerShell kunnen we (vroegtijdig) ons script stoppen. Soms willen we niet meer dat ons script verder gaat en daarvoor gebruiken we het commando exit.

Hoe werkt exit?

Exit stopt ons script en daardoor kunnen we niet verder, maar het sluit powershell niet persé af. Als we binnen de terminal ons script aanroepen, stopt alleen het script zelf. Roepen we exit aan direct in onze terminal? Dan sluit deze af.

Waarom exit gebruiken als we toch if-else al kennen?

If-else structuur kan handig zijn om te gebruiken, maar het heeft ook nadelen. Je moet netjes de juiste stukjes code afbakenen, de goede volgorde aanhouden, rekening houden met alle condities (zeker als er dingen dieper in de code zitten) en je zal alles om het netjes te houden verder opschuiven met tab (indentation). Het is nog wel eens handiger om DIRECT alles te kunnen stoppen en niet nog weer via een if-else alles door te moeten lopen.

Het gaat dus voornamelijk om de leesbaarheid en efficientie van de code.

Voorbeeld:

In het onderstaande voorbeeld gaan we aan een berekeningsbestand doorwerken, maar daarvoor moet deze wel bestaan. Als dat niet zo is, stoppen we met de code.

$waarde = 1 + 2;

$bestand = “berekening.txt”

#controleer of het bestand bestaat en haal dan de waarde op

if(-not (Test-Path $bestand)){

  Write-Host “bestand bestaat niet”

  exit

}

$oudeWaarde = Get-Content $bestand

Set-Content $bestand -Value ($oudeWaarde + $waarde)