Doorgaan naar hoofdcontent

AD Provisioning: Aanmaken organizational units en groups

De afgelopen weken ben ik druk bezig geweest met het maken van provisioning PowerShell scripts voor het vullen van mijn proeftuin Windows 2008 R2 AD. Ik heb hiervoor gebruik gemaakt van de voor PowerShell v2.0 beschikbare Microsoft AD cmdlets. Als altenatief, voor PowerShell v1.0 en niet Windows 2008 R2 omgevingen, kan je gebruik maken van de gratis Quest AD extensies.

Mijn PowerShell script begint met het goed zetten van de executie rechten voor PowerShell.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

De volgende stap is het registreren van de PowerShell module voor AD.

# Inlezen Windows PowerShell Module voor Active Directory. Deze module is
# beschikbaar op Windows 2008 R2 (alleen op de Standard, Enterprise en
# DataCenter versies) en, middels 'Windows Server 2008 R2 Remote Server
# Administration Tools (RSAT)', op Windows 7.
Import-Module ActiveDirectory

Vervolgens heb ik een function geschreven dat op basis van een CSV bestand de provisioning taken voor het aanmaken van organizational units (= organisatorische eenheden) en groups (= groepen) voor zijn rekening neemt.

#
# .SYNOPSIS
# Aanmaken organizational units en groepen op basis van een CSV-bestand.
#
# .DESCRIPTION
# Aanmaken organizational units en groepen op basis van een CSV-bestand.
# De eerste regel van dit CSV-bestand dient de volgende kolomnamen te
# bevatten:
#
# Kolom Toelichting
# ------------- --------------------------------------------------------
# Naam Naam organizational unit / groep
# OU TRUE FALSE
# GroupCategory Distribution Security
# GroupScope DomainLocal Global Universal
# Omschrijving Informatie over het doel
# Parent Het pad in AD waaronder de OU/Groep aangemaakt dient
# te worden. Voorbeeld: OU=Users,DC=Contoso,DC=Com
# Volledige_naam Combinatie van Naam en Parent.
# Voorbeeld: OU=Test accounts,OU=Users,DC=Contoso,DC=Com
#
# .PARAMETER BestandsNaam
# De naam van het CSV-bestand dat ingelezen dient te worden.
#
# .EXAMPLE
# PS C:\> ProvisionActiveDirectoryCSV -BestandsNaam 'c:\provision\ad.csv'
# Dit voorbeeld toont hoe de ProvisionActiveDirectoryCSV functie
# aangeroepen dient te worden met named parameters.
#
# .EXAMPLE
# PS C:\> ProvisionActiveDirectoryCSV 'c:\provision\ad.csv'
# Dit voorbeeld toont hoe de ProvisionActiveDirectoryCSV functie
# aangeroepen dient te worden met gepositioneerde parameters.
#
# .INPUTS
# System.String
#
# .OUTPUTS
# Null
#
function ProvisionActiveDirectoryCSV
{
Param
(
[System.String] $BestandsNaam
)

# Importeren CSV-bestand
$adEntries = Import-Csv -Path $BestandsNaam -Delimiter ";";

foreach ($adEntry in $adEntries)
{
[Microsoft.ActiveDirectory.Management.ADOrganizationalUnit] $adOU;
[Microsoft.ActiveDirectory.Management.ADGroup] $adGroup;

# Onderscheid tussen organizational units en groepen
if ($adEntry.OU -eq $true)
{
# Controle of de organizational unit reeds bestaat in het AD
$adOU = Get-ADOrganizationalUnit -Filter ("DistinguishedName -eq '" +
$adEntry.Volledige_naam + "'");

# Indien de organizational unit niet is gevonden dan maken we het aan
if ($adOU -eq $null)
{
New-ADOrganizationalUnit -Name $adEntry.Naam -Path $adEntry.Parent -Description $adEntry.Omschrijving;
}
trap [Microsoft.ActiveDirectory.Management.ADException]
{
# Fout is niet blokkerend
Write-Warning ("Bij het aanmaken van organisatorische eenheid '" +
$adEntry.Naam + " (" + $adEntry.Parent + ")" +
"' is er een fout opgetreden. De opgetreden fout is: '" +
$_.Exception.Message + " (" +
$_.Exception.GetType() + ")'. ");
Continue;
}
}
else
{
# Controle of de groep reeds bestaat in het AD
$adGroup = Get-ADGroup -Filter ("DistinguishedName -eq '" +
$adEntry.Volledige_naam + "'");

# Indien de groep niet is gevonden dan maken we het aan
if ($adGroup -eq $null)
{
New-ADGroup -Name $adEntry.Naam -Path $adEntry.Parent -GroupScope $adEntry.GroupScope -GroupCategory $adEntry.GroupCategory -Description $adEntry.Omschrijving;
}
trap [Microsoft.ActiveDirectory.Management.ADException]
{
# Fout is niet blokkerend
Write-Warning ("Bij het aanmaken van groep '" +
$adEntry.Naam + " (" + $adEntry.Parent + ")" +
"' is er een fout opgetreden. De opgetreden fout is: '" +
$_.Exception.Message + " (" +
$_.Exception.GetType() + ")'. ");
Continue;
}
}
}
}

De laatste regel van mijn PowerShell script bestaat uit de feitelijke aanroep van de functie. Ik heb bij het schrijven en het testen van het script gemerkt dat de volgorde van de locatie van functies e.d. nogal uitmaakt.

ProvisionActiveDirectoryCSV 'D:\Projects\PowerShell\Gebruikers\ad_inrichting.csv';

Het eindresultaat van het provisioning script is dat mijn proeftuin AD omgeving gevuld is met de gewenste structuur.

image

Reacties

Populaire posts van deze blog

Asus Zenbook UX31A en het loszittende plakbandje

Ik heb al weer een jaar of drie naar tevredenheid een Asus Zenbook UX31A ultrabook in gebruik. Een 13" model met een goede 1920x1080 resolutie en een lekker vlotte Core i7 processor en 256 GB SSD. Helaas heb ik sinds een paar weken problemen met het toetsenbord. Bepaalde toetsen (zoals de A, E, backspace, Windows e.d.) reageren een tijdlang niet om het vervolgens weer wel een tijdje te doen. Na een korte zoekactie op internet blijkt dit een bekend euvel te zijn van deze serie van Asus ultrabooks. Op IFixit vind ik een i nstructie waarin uitgelegd wordt dat dit komt doordat de stekker van het toestenbord los is gekomen achter het stukje plakband. Een euvel dat jezelf kan oplossen als je de juiste schroevendraaier in huis hebt in een minuut of tien. In drie korte stappen wordt uitgelegd wat je moet doen. Van de week de juiste T5 torx schroevendraaier gekocht en vandaag maar een poging gedaan het euvel op te lossen. Na het openschroeven van de achterkant de connector beoordeeld ...

Installatie SQL Server 2008

Alle voorbereidingen voor de installatie van SQL Server 2008 zijn gedaan. Er is een VPC aangemaakt met daarop een verse Windows Server 2008 installatie en in het AD zijn alle benodigde accounts aangemaakt. We loggen op de VPC in met het installatie account (SQL_Setup). Vervolgens maken we verbindingen met de SQL server installatie media. In mijn geval een ISO bestand met daarop SQL Server 2008 Developer Edition. We starten de installatie door de setup te starten (eventueel via Auto Play). Aangezien Windows Server 2008 met Vista de UAC (User Account Control) functionaliteit deelt dient het account dat je gebruikt dus administrator te zijn op de server waarop we SQL Server installeren. De setup wizard detecteert dat het Microsoft .NET Framework (standaard zijn van het Framework v1.0, v1.1 en v2.0 geinstalleerd op Windows Server 2008) bijgewerkt dient te worden naar een hogere versie en dat er een bijgewerkte Windows Installer nodig is. We starten de installatie hiervan middels de keuze ...

Applicatie architectuur

Een gangbare architectuur voor het opdelen van applicatie functionaliteit is die van het groeperen van functionaliteit naar aandachtsgebied. Onderstaande afbeelding geeft de plaat weer die de Patterns & Practices groep van Microsoft hiervoor gebruikt binnen hun Microsoft Application Architecture Guide (2nd edition) . Dit artikel geeft een samenvatting weer van de essentie van deze architecturele opdeling van een applicatie.   Ontwerp principes Hanteer bij het ontwerpen van een applicatie de volgende vijf principes: Scheiden van verantwoordelijkheid (Separation of concerns) . Deel de toepassing op in afzonderlijke functies met zo min mogelijk overlap. Afzonderlijke verantwoordelijkheid (Single Responsibility) principe . Elke component- of module moet verantwoordelijk zijn voor een bepaalde functie / functionaliteit of over de samenvoeging van samenhangende functionaliteit. Het principe van minste kennis (Principle of Least Knowledge) . Een component of een obj...