Enteo und Automatisierung Teil 2

toolsIn diesem Blog Post werde ich eine Funktion vorstellen, die anhand eines Abteilungsnamens eine Hierarchie von Organisationseinheiten in Enteo erstellt.

Nehmen wir an, dass die Abteilungen nach einem klaren Muster benannt sind. Jede Hierarchie wird durch einen Buchstaben dargestellt. Eine Abteilung ABC steht somit an dritter Stelle in der Hierarchie. Über ihr steht die Abteilung AB und darüber A.

Diese Hierarchie soll beim Provisionieren eines Computers nachgebildet werden. Der neu zu installierende PC aus der Abteilung ABC wird daher in die OU A\AB\ABC abgelegt werden.

Dies ermöglicht einen abteilungsweisen Rollout.

Die hier vorgestellte Funktion muss daher folgendes leisten:

  1. Überprüfen ob die OU schon existiert
  2. Falls nicht, den übergebenen Abteilungsnamen zeichenweise zerlegen und bei jeder übergeordneten Abteilung ebenfalls überprüfen, ob diese bereits existiert
  3. Die neue OU unter der übergeordneten Abteilung anlegen
  4. Die Abteilungs-OU wieder zurückgeben.

function createOU
{param([string]$name,$ou)
    cd $ou.path
    $ouRT=Get-EmdbOrganizationalUnit -recurse $name
    if (-not $ouRT) {
        $name.toCharArray() | foreach {
            $ouname=$ouname + $_
            $oupath=$ou.path + "\" + $ouname
            $ou=Get-EmdbOrganizationalUnit -recurse $ouname
            if (-not $ou) {
                write-host "Anlegen: " $oupath
                $ou=new-EmdbOrganizationalUnit -Path $oupath
            }
        }
        $ou
    }
    else
    {
        $ouRT
    }
}

Folgendes passiert hier:

  • Zeile 2: die Funktion benötigt als Übergabeparameter einen String mit dem Namen der Abteilung und ein Emdb-OrganisationalUnit Objekt unter dem die neuen OUs angelegt bzw. gesucht werden sollen
  • Zeile 3: Wechsel in den übergebenen Startpfad
  • Zeile 4: Suchen, ob es schon eine OU mit Namen gibt (unterhalb des Startpfads)
  • Zeile 5: Falls keine existiert, dann muss eine neue angelegt werden.
  • Zeile 6: den OU Namen in ein Zeichenarray zerlegen und jedes Zeichen einzelnd durchlaufen
  • Zeile 7+8: den aktuellen OU Namen in der Hierarchie wieder zusammensetzen und den aktuellen OU Pfad entsprechend erweitern
  • Zeile 9-10: kontrollieren, ob diese Hierarchiestufe schon existiert
  • Zeile 11: falls nicht, die OU mit New-EmdbOrganisationalUnit anlegen.
  • Zeile 15-19: Ein Powershell-Funktion gibt ein Ergebnis wieder zurück, indem es die ensprechenden Objekte einfach in die Pipe ausgibt

Funktionen in Powershell werden etwas anders als in den meisten anderen Programmiersprachen aufgerufen. Parameter werden nicht durch Komma, sondern durch ein Leerzeichen getrennt. Diese Funktion lässt sich somit folgendermaßen aufrufen:

$ou=Get-EmdbOrganizationalUnit -recurse "Powershell"
$ou=createOU "ABC" $ou
This entry was posted in Deutsch, Powershell, Tools and tagged , , . Bookmark the permalink.