binside
Goto Top

Usererstellung für AD und Exchange mit ExchangeVerwaltungsShell und ActiveRolesManagementShell von Quest

Es geht um ein Script, dass einen neuen User im AD und im Exchange erstellen soll. Problem dabei ist für mich, dass DC und Exchange-Server nicht dieselben sind.

Hallo liebe Community,

ich habe die Aufgabe, ein Script zu erstellen, dass das Erstellen eines Users in der Domäne also im Acitve Directory (Windows Server 2008 R2) und gleichzeitig ein Postfach für den User auf dem Exchange Server 2007 (Windows Server 2008) vereinfacht. Bisher wurde zunächst das Postfach erstellt und die Daten dazu abgefragt. Danach wurde das Active Directory aufgerufen und weitere Eigenschaften des Users eingetragen.

Bisher habe ich versucht, das Script mit der ExchangeVerwaltungsShell auf dem Exchange Server zu schreiben soweit es geht, dann die nötigen Variablen auf den Domain Controller zu exportieren und dort die restlichen Einstellungen mit der ActiveRolesManagementShell auszuführen. Allerdings erscheint mir dieses Vorgehen unnötig kompliziert. Auch auf dem Exchange Server 2007 - Server existiert ein Active Directory, allerdings ist die ActiveRolesManagementShell nicht mit Windows Server 2008 kompatibel (sondern nur mit WServer 2k8 R2). Gibt es eine andere Möglichkeit das Active Directory zu manipulieren und wo erlerne ich sie zum Beispiel? Ist mein Ansatz für das Script überhaupt richtig, oder habe ich einen Denkfehler gemacht?

Neugierigst und mit freundlichen Grüßen

B_inside

/B_out

Content-ID: 147308

Url: https://administrator.de/contentid/147308

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

schuhmann
schuhmann 21.07.2010 um 10:56:35 Uhr
Goto Top
Hi,
ich habe auf unserem Exchange quasi das selbe Skript laufen, funktioniert 1A.
Die ganzen Variablen beleg ich mir aus unserem Personalstamm und prüf anhand Einstellungsdaten ab ob der User aktiv ist, gelöscht werden soll,...

Neues Postfach anlegen (inkl. AD User):
new-mailbox -DomainController dc3 -Password $ss -Database $Database -UserPrincipalName $upn -Name $vollername -OrganizationalUnit $OU

AD Attribute setzen:
Set-User -Identity $punktname -DomainController dc3 -department $i.Organisationseinheit -FirstName $i.Vorname -Lastname $i.Nachname -Fax $i."Fax-Nummer" -MobilePhone $i.Handy -Phone $tel -Pager "" -Notes $i.KFZNummer -city $Ort -StreetAddress $Strasse -PostalCode $PLZ -HomePhone $tel[1]

Benutzerdefinierte Attribute am Exchange setzen:
set-mailbox $punktname -ErrorAction SilentlyContinue -CustomAttribute1 $i.BuKr -CustomAttribute2 $Kstneu -CustomAttribute3 $i.Kostenst -CustomAttribute4 $Region -CustomAttribute5 $i.Mitarbeiterkreis -CustomAttribute6 $i."Internet-Zugangsberechtigung" -CustomAttribute7 $i.Standort -CustomAttribute8 $i.Planstelle -CustomAttribute9 $Ort -CustomAttribute13 $Aktiv

Gruß

Nachtrag: Lad dir mal den Power GUI Script Editor runter. Der blendet direkt die Syntax ein sobald du einen Befehl schreibst.
Binside
Binside 21.07.2010 um 11:12:45 Uhr
Goto Top
Hi Schuhmann,

erstmal vielen Dank für deine Antwort.

Den Anfang mit "new-mailbox" habe ich eben so und auch der AD-User wird im AD erstellt. Welches Format die "-OrganizationalUnit" hat krieg ich noch raus. Soll hier nicht Thema sein.

Die AD-Attribute kann man dann scheinbar auch so setzen. Das sind ja keine ActiveRolesManagement-cmdlets, die du da verwendest. Könntest du mir noch kurz erklären, was sich hinter $i verbirgt? Ist das eine Standard-Variable oder hast du die vorher deklariert? Und wie verhält sich das mit -CustomAttribute1-13? Sind die Standard oder von dir deklariert? Gibt es zu denen eine Aufstellung? Ist $punktname der Displayname?

Wissbegierigst und mit freundlichen Grüßen

B_inside

/B_out
schuhmann
schuhmann 21.07.2010 um 11:33:45 Uhr
Goto Top
Hi,

$i ist meine Laufvariable. Ich les alle Personaldaten in ein Objekt ein und durchlaufe es dann mit $i. Es ist also immer ein Objekt einer Person.
Das Format der Organistationseinheit ist einfach "domain.de/Firma/Sortieren".
Die CustomAttributes sind Standardattribute vom Exchange. Schau mal auf dem Exchange in die Postfacheigenschaften unter Allgemein > Benutzerdefinierte Attribute, das sind die.
Den $Punktname hab ich selbst deklarierte, setzt sich bei mir aus Vorname.Nachname zusammen, weil unsere Mailadressen so aufgebaut sind.
In diesem Fall ist damit nur ein Bezeichner des Postfachs gemeint. Da kannste den Alias oder den Displayname nehmen.

Die erweiterten AD Attribute kannst du wie folgt setzen:
Set-QADUser -Identity $punktname -ObjectAttributes @{ipphone="$IPTel"}
Hierüber kannst du alles setzen, ist nur nicht so übersichtlich wie set-user, finde ich. Du kannst einfach die LDAP Feldnamen angeben.

Ansonsten kannst du eigentlich alles direkt mit set-user und set-mailbox belegen.
Binside
Binside 23.07.2010 um 09:41:46 Uhr
Goto Top
Hi,

ok also ganz erschließt sich mir das Ganze noch nicht. $i ist also eine Person, die du in ein Objekt speicherst und zwar mit ihren Eigenschaften. Und darüber kannst du dann die weiteren Eigenschaften mit angeben?

Ich könnte aber auch alle Eigenschaften einzeln sammeln und sie dann auch ohne Laufvariable mit 'set-user' einlesen oder? Gibt es Vorteile, die eine Laufvariable hier prädestinieren?

Den set-Mailbox befehl scheinst du nur für die Custom-Attribute zu brauchen, die bei uns nicht genutzt werden.
set-user war tatsächlich der fehlende Punkt im Script. Ich danke dir dafür. Ich geb dann noch Bescheid obs so geklappt hat wie du gesagt hast und lade bei Bedarf meine Version des Scriptes hoch.
Vielen Dank für deine Geduld.

Mit freundlichen Grüße

B_inside

/B_out
schuhmann
schuhmann 23.07.2010 um 10:16:21 Uhr
Goto Top
Hi,

ich lese eine CSV Datei ein mit unseren Personaldaten:
$data = import-csv C:\datei.csv

Inhalt der CSV:
Nr,Name,.....
1,Max.Muster,.....
2,Melanie.Muster,...

Dann durchlauf ich mit der Laufvariable $i diese eingelesenen Daten.
foreach ($i in $data)
{
}
Ich kann jede Spalte direkt abgreifen, über die Spaltenüberschrift.
Im Durchgang1 liefert $i.Name Max.Muster, im 2. liefert es Melanie.Muster
Den Namen speicher ich in jedem Durchgang in $Punktname ab, um es dann im set-user zu verwenden.
Du könntest auch immer direkt den Namen angeben, set-user Max.Mustermann.
Dann führt er es aber nur für den einen User aus. Da ich aber eine CSV mit mehreren Personen hab, mach ichs in ner Schleife um alle zu erledigen.

Freut mich dass es läuft. Ansonsten lad dein Skript einfach mal hoch.
Gruß
Binside
Binside 23.07.2010 um 10:24:48 Uhr
Goto Top
Hi,

ok du verwendest das Script ein wenig anders als ich. Da bei uns immer nur vereinzelt Mitarbeiter dazu kommen, nutze ich das Script nur, um einzelne Leute in Exchange und AD aufzunehmen. Dabei fragt das Script zunächst verschiedene Daten ab (vorname, nachname, abteilung) und speichert diese um im zweiten Teil dann den User mit diesen Daten zu erstellen. Das Script ist damit pro durchlauf nur für eine Person gedacht.

Nochmal vielen Dank und das Script lade ich dann demnächst hoch, wenn es wirklich perfekt läuft.

Mit freundlichen Grüßen,

B_inside

/B_out
Binside
Binside 27.07.2010 um 08:55:29 Uhr
Goto Top
Hi,

Ich hab im Script jetzt fast alles eingetragen, was unsere Firma fordert. Ich werd die gängigsten Einträge noch zufügen. Allerdings hab ich noch ne kleine Frage:

es geht um die Möglichkeit einem Account eine gewisse Lebensdauer zu geben. Im AD kann man unter Properties -> Account -> Account expires einstellen ob und wann er ausläuft. Is das auch über die Exchange Verwaltungsshell zu realisieren?

Mit freundlichen Grüßen,

B_inside

/B_out
schuhmann
schuhmann 27.07.2010 um 09:18:29 Uhr
Goto Top
Hi,
klar ist das möglich.

Auslesen welches Datum gesetzt ist:
$user = get-qaduser $Username -includedproperties accountexpires | select accountexpires
$user.accountexpires

Datum setzen:
$datum=Get-Date 22.10.2010
Set-QADUser $Username -AccountExpires $datum

Datum deaktivieren:
Set-QADUser $Username -AccountExpires $Null

Gruß
Binside
Binside 27.07.2010 um 10:47:41 Uhr
Goto Top
Hi schuhmann,

ok das ist jetzt mit der Lösung von Quest. Gibt es auch noch eine ohne Active Roles zu nutzen? =) Bisher ging ja alles auch ohne. Und auf dem Exchange-Server ist ja kein WS2008 R2, was Acitve Roles aber voraussetzt.

Mit freundlichen Grüßen,

B_inside

/B_out
schuhmann
schuhmann 27.07.2010 um 11:05:34 Uhr
Goto Top
Bist du dir da sicher? Bei mir läuft das ganze auf nem 2003 R2, dann solls doch auch wohl auf dem 2008er laufen.
Lads dir doch mal runter: http://www.quest.com/powershell/activeroles-server.aspx
Dann lad dir auch gleich den PowerGUI ScriptEditor: http://www.powergui.org/downloads.jspa

Eine andere Lösung hab ich sonst nicht parat.
Binside
Binside 29.07.2010 um 13:05:08 Uhr
Goto Top
Ok also so wie es aussieht, geht es tatsächlich nur so. Das von Quest läuft übrigens wirklich schon aufm 2003er ab SP 1. Das was ich meinte war die Active Directory Shell, ein Modul, dass nur ab Server 2008 R2 nutzbar ist. Demnächst dann hier das Script mit dem Stückchen noch dran.

Danke dir schuhmann

Mit freundlichen Grüßen,

B_inside

/B_out
Binside
Binside 09.08.2010 um 09:39:39 Uhr
Goto Top
Hallo,

es gibt doch noch eine Möglichkeit das ohne Quests PowerShell-Modul zu machen:

Mit

$user = [ADSI]"LDAP://CN=Max Mustermann,OU=Berlin,DC=Bspdomain,DC=de"

liest man den User aus

$user | get-member

zeigt einem dann unter anderem

accountExpires property System.DirectoryService.PropertyValueCollection accountExpires {get;set;}

damit kann man dann den Wert ändern, wovor mir allerdings noch gruselt, denn "ADSI Edit" zeigt den AccountExpires-Wert als Dezimalzahl und nicht als Datum/Uhrzeit an.

MfG

/B_out