Nå som du forstår byggeblokkene i AD, skal vi sette dem sammen. Først lærer vi AGDLP – mønsteret som er hele hjertet av tilgangsstyring i AD. Så lærer vi å automatisere det med PowerShell. Sensorveiledningen vet du har dette på fingrene.
Forrige modul lærte du om grupper. Du vet at Global og Domain Local finnes, og du vet at grupper brukes til å gi rettigheter. Men hvorfor trenger vi to forskjellige gruppetyper? Hvorfor ikke bare én?
La oss illustrere problemet med et eksempel. NovaTech har 200 ansatte fordelt på 4 avdelinger, og bedriften har 50 forskjellige mapper på filserveren med ulike tilgangsbehov. Hver ansatt trenger tilgang til 5-10 mapper.
Den naive løsningen – gi hver bruker direkte tilgang til hver mappe – betyr fort:
200 brukere × 7 mapper i snitt = 1400 tilgangstildelinger å vedlikeholde
Ny ansatt Per i Salg → du må manuelt sette opp ham med tilgang til 7 mapper
Per bytter til Markedsføring → fjern 7 tilganger, legg til 7 nye
Per slutter → husk å fjerne alle 7 tilgangene (gjør du ikke det = sikkerhetshull)
«Direkte tilgang fra brukere til ressurser er det IT-administrasjon-mareritt skapt av. AGDLP er hvordan voksne mennesker løser problemet.»
AGDLP gir oss en tilgangskjede som separerer to ting som ofte forveksles:
🪪 Hvem du er
Brukerkontoen din
Rollen din i organisasjonen
Avdelingen du jobber i
🔑 Hva du får tilgang til
Hvilke filer/mapper
Hvilke skrivere
Hvilke nivåer av tilgang (lese/skrive)
AGDLP kobler disse to verdenene via grupper, så de kan endres uavhengig av hverandre.
⚡ Forhåndsvarsel
Denne modulen bygger på Modul 1. Hvis du er usikker på forskjellen mellom Global Group og Domain Local Group, er det smart å hoppe tilbake til §6 i Modul 1 først.
§ 02 — Mønsteret
AGDLP-mønsteret i detalj
AGDLP står for Accounts → Global groups → Domain Local groups → Permissions. La oss gå gjennom hvert ledd med Kari Hansen som case:
🪪 A — Account (brukerkontoen)
Vi starter med selve brukeren. Kari har en domenekonto: kari.hansen. Hun jobber i Salg-avdelingen hos NovaTech.
🌐 G — Global Group (rollebasert)
Vi lager en gruppe som representerer rollen Karis er i. Alle som jobber i Salg legges i denne gruppen. Vi kaller den g_salg.
Hvis Kari bytter til Markedsføring senere, flytter vi henne fra g_salg til g_markedsforing – og hennes tilganger oppdateres automatisk. Du trenger ikke å huske hver eneste mappe hun hadde tilgang til.
🏠 DL — Domain Local Group (ressursbasert)
For hver ressurs vi vil dele ut, lager vi en gruppe som representerer den tilgangen. For lese-tilgang til Salg-mappen: dl_salg_filer_read.
Deretter legger vi g_salg som medlem av dl_salg_filer_read. Hele Salg-rollen får dermed tilgangen i ett strøk.
🔐 P — Permissions (faktisk rettighet)
Til slutt setter vi de faktiske NTFS-rettighetene på selve mappen. Vi gir dl_salg_filer_read Read-tilgang til \\fileserver\Salg.
Tilgangskjeden: brukeren arver rettigheter gjennom kjeden – men du administrerer hvert ledd uavhengig.
Magien skjer når en ny ansatt starter. Anta at Ola begynner i Salg:
Opprett brukerkontoen ola.nordmann
Legg ham i g_salg
Det er det. Han har nå tilgang til alle Salg-mapper automatisk.
Hvis Ola slutter, slett kontoen hans (eller deaktiver den). Alle tilgangene fjernes umiddelbart fra hele kjeden, fordi de var aldri tildelt ham direkte.
🎯 Hovedpoenget
G organiserer brukere. Vi har én G-gruppe per rolle/avdeling. DL organiserer tilgang. Vi har én DL-gruppe per ressurs+rettighet-kombinasjon. G blir medlem av DL. Dette er koblingen som lar tilgangsstyring skalere.
Scenario: Utvikling-avdelingen trenger skrivetilgang til mappen \\fileserver\Kode. Klikk komponentene i riktig rekkefølge for å bygge tilgangskjeden.
0 / 4 plassert
NTFS Write på \\fileserver\Kode
g_utvikling
per.hansen (utvikler)
dl_kode_write
Du har det! 🎓 Husk: Account → Global (rolle) → Domain Local (ressurs+rettighet) → Permissions. Den nye utvikleren legges i g_utvikling, og arver automatisk skrivetilgangen til Kode-mappen.
§ 03 — Navngiving
Navnekonvensjoner – språk for grupper
Sensorveiledningen din nevner eksplisitt at du skal «følge fast navnekonvensjon». Dette er ikke kosmetisk – det er essensielt fordi gruppenavn forteller hvem som leser dem hva gruppen gjør, uten å måtte slå opp.
Standard-mønsteret som brukes i forelesningene dine:
🌐 Global groups: g_
g_salg – alle som jobber i Salg
g_utvikling – alle utviklere
g_hr – alle i HR
g_ledelse – ledergruppen
🏠 Domain Local: dl_
dl_salg_filer_read – lese-tilgang til Salg-mappa
dl_salg_filer_write – skrive-tilgang til Salg-mappa
dl_skriver_marketing – tilgang til marketing-skriver
dl_db_lese – lese-tilgang til database
Legg merke til strukturen i DL-navnene: dl_<ressurs>_<handling>. Dette gjør at du ved et blikk kan se hva gruppen gir tilgang til og på hvilken måte.
💡 Hvorfor prefiks?
Når du senere skal automatisere med PowerShell og bruke Get-ADGroup -Filter 'name -like "g_*"' for å hente alle Global-grupper, så er prefiksen redningen. Den gjør grupper søkbare på en programmatisk måte.
⚡ Interaktiv øvelse · navnekonvensjon drag to bucket
Klassifiser gruppene etter scope
Basert på navnet, plasser hver gruppe i riktig bøtte. Husk: g_ = Global (organiserer brukere), dl_ = Domain Local (gir ressurstilgang).
Klikk gruppe → klikk bøtte
0 / 8 plassert
g_administrasjon
dl_regnskap_filer_write
g_alle_ansatte
dl_skriver_andre_etg
g_it_admin
dl_backup_lese
dl_filserver_admin
g_markedsforing
🌐 Global (rolle)
🏠 Domain Local (ressurs)
Nice! 🎯 Du leser nå gruppenavn som en proff. Når du jobber med AD-strukturen i en bedrift, kan du ved et blikk se hva gruppen gjør – uten å åpne den.
§ 04 — Verktøyet
Velkommen til PowerShell
OK – så vi vet hvordan vi burde sette opp tilgangsstyring (AGDLP). Men hvis vi skal lage 30 brukere, 4 OU-er, 4 Global-grupper, 8 Domain Local-grupper, og koble dem alle riktig... det blir mye klikking i grafiske verktøy.
Dette er hvor PowerShell kommer inn. PowerShell er et automatiseringsspråk som er bygget rett inn i Windows. Du skriver instrukser, kjører dem, og PowerShell utfører dem mye fortere og mer pålitelig enn manuell klikking.
Kjøkken-analogi: Tenk at du skal lage 30 like sandwicher. Du kunne brukt en skje for å smøre majones på hver av dem manuelt – det funker, men tar evigheter. Eller du kunne bygd en pølsemaskin som tar in ingredienser, og automatisk lager sandwicher.
PowerShell er sandwich-maskinen. Du putter inn en CSV-fil med 30 brukere, og ut kommer 30 ferdige AD-brukere – feilfritt, hver gang.
Hva gjør PowerShell spesielt?
📟 Klassisk CMD
Tekstbasert (alt er strenger)
Begrenset funksjonalitet
Vanskelig å iterere over data
Ikke designet for systemadministrasjon
⚡ PowerShell
Objektorientert (alt er objekter)
Tilgang til hele .NET-rammeverket
Naturlig pipeline mellom kommandoer
Designet for sysadmin og automatisering
⚡ Hvorfor AD ❤️ PowerShell
Husker du fra Modul 1 at alt i AD er objekter? PowerShell er også objektorientert – så når du henter en bruker med Get-ADUser, får du tilbake et faktisk objekt med alle Karis attributter (Department, Email, Manager osv.) som du kan jobbe direkte med. Dette er en match made in heaven.
🧠 Sjekk forståelsen · flervalg
Hva er hovedformålet med å bruke PowerShell for AD-administrasjon?
Riktig! 🎯 Automatisering er nøkkelordet. Det er ikke at du må bruke PowerShell – den grafiske konsollen funker fint. Men når du har 30 like oppgaver, vil PowerShell gjøre på 30 sekunder det som manuelt tar 30 minutter.
Tenk på sandwich-analogien. PowerShell er ikke for pene resultater (A) eller umulige oppgaver (C), og du kan administrere AD manuelt (D er feil). Det handler om effektiv automatisering. Svar B.
§ 05 — Syntaksen
Verb-Substantiv – PowerShells DNA
Det fantastiske med PowerShell-kommandoer (kalt cmdlets) er at de følger et helt forutsigbart navnemønster: Verb-Substantiv.
Verbet sier hva du vil gjøre. Substantivet sier hva du vil gjøre det på.
Eksempler
Get-ADUser# Hent en (eller flere) brukereNew-ADUser# Opprett en ny brukerSet-ADUser# Endre en eksisterende brukerRemove-ADUser# Slett en brukerNew-ADGroup# Opprett en ny gruppeAdd-ADGroupMember# Legg bruker i gruppe
De 5 mest brukte verbene er:
Get – hent / les noe
Set – endre noe som finnes
New – opprett noe nytt
Remove – slett noe
Add – legg til noe i en samling (f.eks. gruppemedlem)
🎯 Eksamenstips
Når du skriver pseudokode på eksamen, trenger du ikke huske eksakte cmdlet-navn. Det er nok å si «hent brukeren» eller «opprett gruppen». Men hvis du kan navnemønsteret Verb-Substantiv, viser du at du forstår strukturen, og det imponerer sensor.
⚡ Interaktiv øvelse · cmdlet-gjenkjenning match pairs
Match cmdletene til hva de gjør
Klikk en cmdlet, deretter dens forklaring. Tenk på verbet først (Get/New/Set/Remove/Add), så på substantivet.
0 / 5 matchet
Cmdlet
New-ADUser
Get-ADUser
Add-ADGroupMember
New-ADOrganizationalUnit
Set-ADUser
Hva den gjør
Endre attributter på en eksisterende bruker
Opprett en helt ny brukerkonto i AD
Opprett en ny container for å organisere objekter
Hent en eller flere brukere fra AD
Legg en bruker (eller gruppe) inn i en gruppe
§ 06 — Mekanikken
Variabler, parametre, pipeline
For å skrive nyttige scripts trenger du tre konsepter til. La oss ta dem kjapt.
1. Variabler – lagre verdier
En variabel er et navn vi gir til en verdi vi vil bruke senere. I PowerShell starter alle variabler med $:
Legg merke til at vi bruker variabelen $brukernavn i stedet for å skrive «kari.hansen» direkte. Dette er kjernen i hvorfor variabler er kraftige – vi kan bytte verdier én gang og ha dem brukt mange steder.
3. Pipeline – send data fra én cmdlet til neste
Pipeline (skrevet med |) lar oss sende output fra én kommando som input til den neste. Dette er supernyttig:
# Hent Kari, og endre avdelingen hennes på en gang:Get-ADUser kari.hansen | Set-ADUser-Department"Markedsføring"
💧 Tenk på det som vannrør
Hver cmdlet er som et rør. Get-ADUser henter vann (data), og pipeline-tegnet | sender det videre til neste rør (Set-ADUser) som gjør noe med vannet før det forlater systemet. Du kan koble mange rør sammen.
§ 07 — Toolkit
Verktøykassen: AD-cmdletene
Til eksamen trenger du å kjenne til disse cmdletene – ikke huske eksakt syntaks utenat, men forstå hva de gjør og når de brukes:
Backtick (`) på slutten av linja er PowerShells «fortsett på neste linje» – kun for lesbarhet.
Gruppeadministrasjon
Opprette grupper og legge til medlemmer
# Opprett en Global sikkerhetsgruppeNew-ADGroup-Name"g_salg"-GroupScope Global -GroupCategory Security `
-Path"OU=Salg,OU=NovaTech-Group,DC=novatech,DC=local"# Opprett en Domain Local gruppeNew-ADGroup-Name"dl_salg_filer_read"-GroupScope DomainLocal -GroupCategory Security `
-Path"OU=Salg,OU=NovaTech-Group,DC=novatech,DC=local"# Legg per.hansen i g_utviklingAdd-ADGroupMember-Identity"g_utvikling"-Members"per.hansen"# Legg g_salg som medlem av dl_salg_filer_read (AGDLP!)Add-ADGroupMember-Identity"dl_salg_filer_read"-Members"g_salg"
Du må ikke huske alle parameterne, men disse er nyttige:
-Name: hva objektet skal hete
-Path: hvor i AD-strukturen det skal opprettes (DN-en til container-OU-en)
-SamAccountName: innloggingsnavnet (kortform)
-UserPrincipalName: e-postformat innloggingsnavn
-GroupScope + -GroupCategory: for grupper, spesifiserer scope (Global/DomainLocal) og type (Security/Distribution)
⚡ Interaktiv øvelse · scenario-til-cmdlet match pairs
Match scenario til riktig cmdlet
Tenk: hvilket verb og hvilket substantiv trengs for å løse hvert scenario?
0 / 5 matchet
Scenario
Sjekk om brukeren kari.hansen finnes i AD
Legg den nye utvikleren Per i gruppen g_utvikling
Opprett gruppen dl_filer_marketing_write
Endre Karis avdeling fra Salg til Markedsføring
Lag en ny OU «Konsulenter» under NovaTech-users
Cmdlet
New-ADGroup
Set-ADUser
Get-ADUser
New-ADOrganizationalUnit
Add-ADGroupMember
Du har det! 🔥 Du kan nå velge riktig cmdlet for vanlige AD-oppgaver. Det viktige er Verb-Substantiv-tenkningen: «Skal jeg lage noe nytt? → New». «Skal jeg endre? → Set». «Skal jeg hente? → Get».
§ 08 — Iterasjon
ForEach-Object – iterere over data
OK – så vi vet hvordan vi oppretter én bruker. Men sjeldsynt har vi bare én. Vi har 30 nye ansatte, og vi vil ikke skrive New-ADUser 30 ganger.
Dette er hvor iterasjon kommer inn. Vi sier til PowerShell: «For hvert element i denne lista, gjør X». PowerShell vil utføre X for hvert eneste element, automatisk.
Cmdleten heter ForEach-Object (kortform %). Pseudokoden:
$_ betyr «det nåværende elementet i loopen». Første runde: $_ = "kari.hansen". Andre runde: $_ = "ola.nordmann". Osv.
🔑 Husk $_
$_ er hjertet i alle PowerShell-loops. Den representerer «det elementet jeg er på akkurat nå». Når du jobber med iterasjon, kommer du til å bruke den hele tiden.
⚡ Interaktiv øvelse · bygg en loop sequence builder
Sett sammen pipelinen riktig
Vi vil opprette tre brukere fra en liste. Klikk komponentene i riktig rekkefølge for å bygge pipelinen.
0 / 4 plassert
}
$nye_brukere = "per", "kari", "ola"
New-ADUser -Name $_ -Enabled $true
$nye_brukere | ForEach-Object {
Pipelinen er bygget! 🌊 Først lagrer vi lista i en variabel. Så sender vi den gjennom pipelinen til ForEach-Object. Inni krøllparentesene refererer $_ til hver enkelt bruker etter tur. Til slutt lukker vi blokken med }.
§ 09 — Data inn
Import-CSV – data inn i scriptet
I virkeligheten kommer brukerinformasjonen sjelden i en kort liste i koden – den kommer i en CSV-fil fra HR-systemet. CSV (Comma-Separated Values) er den enkleste tabellfilformatet som finnes:
ansatte.csv
Name,Username,Department,Title
Per Hansen,per.hansen,Utvikling,Senior Developer
Kari Olsen,kari.olsen,Salg,Account Manager
Ola Nordmann,ola.nordmann,Markedsføring,Marketing Lead
Marit Berg,marit.berg,Administrasjon,HR Manager
Første linje er kolonneoverskriftene. Hver påfølgende linje er én rad med data.
Import-CSV leser denne fila og gir oss en samling objekter – ett objekt per rad. Hvert objekt har egenskaper som matcher kolonneoverskriftene:
$ansatte = Import-Csv-Path"C:\data\ansatte.csv"# Nå kan vi iterere:$ansatte | ForEach-Object {
Write-Host$_.Name "jobber i"$_.Department
}
Legg merke til $_.Name og $_.Department – det er slik vi henter egenskaper fra det nåværende objektet. Punktum mellom variabel og egenskap.
🎯 Eksamensmønster
«Bruk Import-CSV for å lese data fra fil og bruke den som input i scripts» – dette er nøyaktig det som står i pensumguiden din. Et typisk eksamen-scenario: bedriften har en CSV-fil med 30 nye ansatte, og du skal forklare i pseudokode hvordan du oppretter alle i AD.
Mapping fra CSV til AD-bruker
I scriptet bruker du verdiene fra CSV-en til å fylle New-ADUser-parameterne:
Anta CSV-en over. Match kolonnen til hvilken AD-parameter den naturlig kobles til.
0 / 4 matchet
CSV-kolonne
Name
Username
Department
Title
AD-parameter
-Title (Karis stilling/tittel)
-Name (visningsnavnet i AD)
-Department (også brukt til å finne OU)
-SamAccountName (innloggingsnavnet)
§ 10 — Logikk og feilhåndtering
If-Else og Try-Catch
If-Else – betinget logikk
Ofte skal scriptet ditt ta forskjellige valg avhengig av situasjonen. Hva hvis brukeren allerede finnes? Da skal du ikke prøve å opprette den på nytt.
Pseudokode
hvis brukeren finnes:
skriv «brukeren finnes allerede»
ellers:
opprett brukeren
PowerShell
if (Get-ADUser-Filter"SamAccountName -eq '$username'") {
Write-Host"Bruker finnes allerede"
} else {
New-ADUser-Name$navn-SamAccountName$username
}
Logikken er enkel: hvis betingelsen i parentesen er sann, kjøres første blokk. Ellers kjøres else-blokken.
Try-Catch – feilhåndtering
Hva skjer hvis CSV-fila ikke finnes? Hva hvis AD-tjenesten er nede? Hva hvis vi prøver å opprette en bruker i en OU som ikke eksisterer? Uten feilhåndtering krasjer scriptet ditt.
Try-Catch er PowerShells måte å si: «Prøv å gjøre dette. Hvis det går galt, gjør dette i stedet for å krasje.»
Pseudokode
prøv:
opprett bruker
fang feil:
skriv feilmelding til logg
fortsett til neste bruker
PowerShell
try {
New-ADUser-Name$navn-Path$ou_stiWrite-Host"Opprettet "$navn-ForegroundColor Green
} catch {
Write-Host"Feilet for "$navn":"$_.Exception.Message -ForegroundColor Red
}
⚠️ Hvorfor Try-Catch er kritisk
Tenk deg at du oppretter 30 brukere. Den 7. har en feil i CSV-en (kanskje en spesialkarakter). Uten Try-Catch krasjer scriptet på bruker 7, og brukere 8-30 blir aldri opprettet. Med Try-Catch logger du bare feilen og fortsetter – og du ender opp med 29 brukere opprettet og én rapport om hva som gikk galt.
⚡ Interaktiv øvelse · velg riktig logikk drag to bucket
Hvilken kontroll-struktur trenger du for hvert scenario?
For hver situasjon: bør du bruke If-Else (en beslutning) eller Try-Catch (feilhåndtering)?
Klikk scenario → klikk bøtte
0 / 6 plassert
Sjekk om brukeren allerede finnes før vi oppretter
Håndtere at CSV-fila ikke finnes på disken
Velg riktig OU basert på avdelingsnavnet
Logge feil hvis AD-tjenesten er utilgjengelig
Sett -Enabled $true bare hvis ansatt har startdato <= i dag
Fange uventede feil under bulk-oppretting
🔀 If-Else
🛡️ Try-Catch
Glimrende! 🎓 Tommelfingerregel: If-Else = «du vet at en av to ting kommer til å skje» (du tar et valg). Try-Catch = «noe uventet kan gå galt» (du beskytter mot krasj).
§ 11 — Komplett script
Pseudokode – bygg et helt script
Nå skal vi sette alt sammen. Husk det viktigste poenget fra eksamenstekstene dine:
«Det er ikke viktig med korrekt syntaks i denne oppgaven, og en kan forklare hvordan en ville gjort det med egne ord / pseudokode.»
Det betyr at du ikke trenger å huske eksakt PowerShell-syntaks på eksamen. Du trenger å vise at du forstår logikken. La oss bygge et komplett pseudokode-script som dekker et realistisk eksamen-scenario:
📝 Scenario
NovaTech har 30 nye ansatte. Du har en CSV med navn, brukernavn og avdeling. Du skal opprette alle i AD, plassere dem i riktig avdelings-OU, legge dem i riktig avdelings-Global-gruppe, og logge eventuelle feil.
La oss bygge dette steg for steg som pseudokode:
Komplett pseudokode
# 1. Les inn data
les CSV-fila "ansatte.csv" inn i variabelen $ansatte# 2. Iterer over hver brukerfor hver ansatt i$ansatte:
prøv:
# 3. Sjekk først om brukeren allerede finneshvis ansatt finnes i AD:
skriv "finnes allerede, hopper over"
fortsett til neste
# 4. Finn riktig OU basert på avdelingen$ou_sti = "OU=" + ansatt.Department + ",OU=NovaTech-users,DC=novatech,DC=local"# 5. Lag UPN fra brukernavnet$upn = ansatt.Username + "@novatech.local"# 6. Opprett brukeren i riktig OU
opprett ny bruker med:
navn = ansatt.Name
brukernavn = ansatt.Username
upn = $upn
path = $ou_sti
aktivert = ja
# 7. Legg i riktig avdelings-Global-gruppe (AGDLP!)
legg ansatt.Username inn i gruppen "g_" + ansatt.Department.ToLower()
logg "opprettet " + ansatt.Name
fang feil:
logg feilen til "feil.log"
fortsett til neste bruker
Legg merke til at dette pseudokode-scriptet inkluderer alle nøkkelelementene fra pensumguiden:
✅ Import-CSV for å lese fila (steg 1)
✅ ForEach-Object for å iterere (steg 2)
✅ If-Else for å sjekke om brukeren finnes (steg 3)
✅ Try-Catch for feilhåndtering (rundt steg 3-7)
✅ AGDLP-prinsippet (steg 7: legger i Global-gruppe)
Klikk linjene i den rekkefølgen de bør utføres for å opprette brukere fra en CSV-fil med riktig feilhåndtering.
0 / 6 plassert
legg bruker inn i riktig Global-gruppe (g_avdeling)
for hver ansatt i $ansatte:
fang feil: logg til feil.log og fortsett
prøv:
$ansatte = Import-CSV "ansatte.csv"
opprett bruker i OU=Department,...
Bravo! 🏆 Du har akkurat bygget strukturen til et eksamen-svar i pseudokode. Hvis du forklarer hvert steg med dine egne ord på eksamen, får du full uttelling – uten å trenge å huske eksakt PowerShell-syntaks.
🎯 Hva sensor leter etter
Når sensor leser pseudokoden din, sjekker hen:
1. Bruker du Import-CSV-prinsippet (eller forklarer at du leser inn data fra fil)?
2. Itererer du over dataene (foreach/loop)?
3. Bygger du riktig OU-sti basert på avdelingen?
4. Følger du AGDLP (legger i Global-gruppe)?
5. Håndterer du feil (try-catch eller om-eksisterer-sjekk)?
6. Skriver du leselig pseudokode som er logisk strukturert?
🔥 § 12 — Final boss
Mixed challenge – kan du AGDLP og PowerShell nå?
Disse spørsmålene tester den brede forståelsen av AGDLP og PowerShell-logikk. Knus dem alle, og du er klar for både flervalg og essay-oppgaver om automatisering.
⚔️ Boss-spørsmål 1 av 6 · AGDLP-praksis
Du skal gi Markedsføring-avdelingen lesetilgang til en ny prosjektmappe. Hvilken løsning følger AGDLP-prinsippet?
Riktig! 🎯 Account → Global (g_markedsforing) → Domain Local (dl_prosjekt_read) → Permissions. Hver ledd har én ansvarsoppgave, og hele kjeden skalerer fint.
A bryter AGDLP (ingen grupper). B hopper over Domain Local-leddet. D ignorerer hele AGDLP-prinsippet. Svar C følger den rette kjeden.
⚔️ Boss-spørsmål 2 av 6 · Verb-Substantiv
Hvilken cmdlet ville du brukt for å hente en eksisterende bruker fra AD og endre avdelingen hennes?
Spot on! 🔥 Get-ADUser henter, Set-ADUser endrer. Disse kobles ofte med pipeline: Get-ADUser kari | Set-ADUser -Department "Salg".
New er for å opprette nye, Add er for å legge i samlinger (f.eks. gruppemedlem). «Change-ADUser» finnes ikke. Riktig verbpar her er Get → Set. Svar C.
⚔️ Boss-spørsmål 3 av 6 · Iterasjonslogikk
Du har 50 brukere i en CSV-fil. Hva representerer $_ inne i en ForEach-Object-loop?
Helt riktig! 🎯$_ er «det jeg jobber med akkurat nå». Hvis du har en liste med brukere og itererer, vil $_ være Per i første runde, Kari i andre runde, osv. Du kan hente egenskaper med punktum: $_.Department.
Husk: $_ = «det aktuelle elementet i loopen». Det er ikke hele lista (A), ikke indexen (C), og ikke gjenstående antall (D). Svar B.
⚔️ Boss-spørsmål 4 av 6 · Pseudokode-tolkning
I et bulk-opprettingsscript: hva er fordelen med å bruke Try-Catch rundt opprettingen av hver bruker?
Yes! 💪 Robusthet er nøkkelordet. Uten Try-Catch krasjer hele scriptet på første feil. Med Try-Catch får du en partial success og en feilrapport – mye bedre i praksis.
Try-Catch handler ikke om hastighet eller kryptering. Det handler om robusthet: hvis noe feiler, fortsetter resten av jobben. Svar C.
⚔️ Boss-spørsmål 5 av 6 · CSV-mapping
CSV-fila har kolonnen «Department». Hvordan refererer du til den verdien for den nåværende raden i ForEach-Object-loopen?
Riktig! 🔥$_ er det aktuelle objektet, og .Department er egenskapen på det objektet (matcher kolonneoverskriften i CSV-en).
Husk syntaksen: $_ for det aktuelle objektet + .EgenskapsNavn for kolonnen. Svar B.
⚔️ Boss-spørsmål 6 av 6 · Komplett scenario
Eksamen-stil scenario: Du skal beskrive i pseudokode hvordan du oppretter 30 nye AD-brukere fra en CSV. Hvilken kombinasjon dekker alle de viktige aspektene sensor leter etter?
Mesterlig! 🎓 Du har dekket: data inn (Import-CSV), iterasjon (ForEach), feilhåndtering (Try-Catch), om-finnes-sjekk (If-Else), oppretting (New-ADUser), og AGDLP-medlemskap (Add-ADGroupMember). Dette er komplett.
A mangler iterasjon og feilhåndtering. B mangler feilhåndtering og AGDLP-koblingen. D er for sletting, ikke oppretting. Svar C er komplett.
💪 6/6? Da har du knust AGDLP + PowerShell-pensumet!
§ 13 — Oppsummering
Nøkkelpunktene du må huske
Det var en stor modul – men du har akkurat dekket hjertet av AD-automatisering. Her er destillasjonen:
📋 Modul 2 – Cheat sheet
AGDLP = Account → Global → Domain Local → Permissions. Memoriser dette mønsteret!
Global groups organiserer brukere etter rolle/funksjon (g_salg, g_utvikling).
Domain Local groups organiserer ressurstilgang (dl_filer_read, dl_skriver_admin).
Følg navnekonvensjon: g_ for Global, dl_ for Domain Local. Sensor verdsetter dette.
PowerShell er Microsofts automatiseringsverktøy – objektorientert, designet for sysadmin.
Du har nå AD-strukturen og automatiseringen i orden. Tid for det andre høyprioritets-temaet: Group Policy. Vi lærer hvordan GPO-er arves, hvordan de behandles i rekkefølge (LSDOU), og forskjellen på «enforced» og «block inheritance». Klar? 🚀
GPOLSDOUArvBlock InheritanceEnforcedUser vs Computer config