Scripts i AD2-synk

Informasjon om script-kjøring i AD2-synkroniseringsjobben.

1   Introduksjon

Cerebrum sin integrasjon med AD har støtte for å starte powershell-skript. Dette kan brukes av de som drifter AD som hooks for å gjøre ekstra endringer på de objektene som Cerebrum oppretter, endrer på og avvikler.

Eksempler på endringer som kan gjøres gjennom script-kjøringen:

  • For alle nye brukerkontoer: Opprett mailboks i Exchange og legg til i Lync.
  • For brukerkontoer som får oppdatert sitt e-postadresse-attributt (ProxyAddresses): Legg til adressene i Exchange.

Script utføres etter at AD-objektet har blitt endret på.

Skriptet må finnes på Windows-maskinen som Cerebrum kommuniserer med (member server). Cerebrum må få vite hvor skriptet befinner seg, dette skal stå i spesifikasjonen til den spesifikke integrasjonen.

2   Hendelser

Følgende hendelser finnes i AD2-synken, og kan få konfigurert script-kjøring:

pre_sync

Kjøres ved synk-start, før data hentes fra AD.

Input: Action, UUID

post_sync

Kjøres ved synk-slutt, etter alle oppdateringer i AD er ferdig.

Input: Action, UUID

new_object

Kjøres etter et objekt har blitt opprettet i AD.

Input: Action, UUID, Identity

move_object

Kjøres ved flytting av objekt.

Input: Action, UUID, Identity, Move_from

Merk at move_object utføres før eventuelle objekt-attributter har blitt oppdatert.

modify_object

Kjøres etter et objekt har fått endret attributter.

Input: Action, UUID, Identity, Changes

Merk at modify_object ikke utføres ved endring av passord.

2.1   Argument

Følgende argument kan bli sendt med scriptet. Merk at ikke alle hendelser vil sende med alle argument.

-Action
Identifiserer hendelsen som startet scriptet. Verdien er en av hendelsene som er beskrevet i hendelser.
-Identity

Identifiserer objektet som en hendelse har påvirket. Kan være DistinguishedName eller ObjectGUID. Verdien her bør kunne benyttes som -Identity-verdi i Get-ADObject og andre AD-cmdlets i PowerShell.

Merk: Ved hendelsen move_object, vil -Identity inneholde objektets nye DistinguishedName.

-UUID
En unik verdi som blir generert ved script-kjøring. Denne verdien har ingen bruksområde i AD, men kan benyttes for feilsøking i loggene på Cerebrum-siden.
-Move_from
Inneholder objektets gamle DistinguishedName (kun move_object).
-Changes
Inneholder en liste over Properties som har blitt endret (kun modify_object).

3   Script

Eksempelscript:

param (
    [string]$action = $(throw "-action is required"),
    [string]$uuid = "no uuid",
    [string]$identity = $null,
    [string]$move_from = $null,
    [string[]]$changes = @()
)

$scptname = “remote-crb-script”
New-EventLog –LogName Application –Source “$scptname" -ErrorAction 'silentlycontinue'
function log # <level> <msg>
{
    Write-EventLog –LogName Application –Source $scptname -ErrorAction 'silentlycontinue' –EventID 1 -EntryType $args[0] –Message “${action}(${uuid}): $($args[1])"
}

try {
    $dump = @{Action="$action";Identity="$identity";AttrChanges="$changes";"Old OU"="$move_from";}
    if ($identity) {
        $dump += @{Type="$(Get-ADObject -Identity $identity | Select -ExpandProperty objectClass)"}
    }
    ConvertTo-Json -Compress $dump
    log Information "success"
} catch {
    log Error "$_"
    throw
}

Merk at AD-synkroniseringen ikke tar hensyn til om script-kjøringen feiler – eventuelle feil må håndteres på domenekontrolleren. Dersom et script feiler, vil synkroniseringen fortsette som normalt.

Det anbefales at script-kjøring logges, og at loggmeldinger inneholder verdien som angies som -UUID til scriptet.

4   Cerebrum drift

Dette avsnittet er ment for de som drifter Cerebrum.

4.1   Konfigurasjon

Hver synk-konfigurasjon i adconf.py vil ha sin egen, separate script-konfigurasjon. Scripts konfigureres under nøkkelen script, og verdien er en dict som mapper hendelsesnavn til en script-fil som ligger lokalt på domenekontrolleren.

En typisk konfigurasjon vil da se ut som:

SYNCS['my_sync_type'] = {
    …
    'script': {
        'new_object': r'c:\my_script.ps1',
        'move_object': r'c:\my_script.ps1',
    },
}

4.2   Logging

  • Kjøring av scripts logges med nivå INFO
  • Kjøretid logges med nivå DEBUG, dersom script-kjøring er vellykket.
  • Output logges med nivå DEBUG4, dersom script-kjøring er vellykket.
  • En WARNING logges dersom script-kjøring feiler.
Av fhl
Publisert 2. okt. 2017 20:43 - Sist endret 12. mai 2019 11:20