none
Script zur Erstellung von Exchange- und Active Directory-Usern RRS feed

  • Frage

  • 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

    Mittwoch, 21. Juli 2010 07:13

Antworten

  • Ok ich habe einen anderen Weg gefunden. Die Lösung sieht in etwa so aus:

    # Script zur Erstellung eines neuen Exchange- und Active Directory Users
    
    # Features:
    # Neue Mailbox für einen User
    # Unterscheidung zwischen Mitarbeiter und Praktikant
    # Unterscheindung zwischen den Standorten und Abteilungen
    # Automatische Eingabe von Organisationseinheit, Vorname, Nachname, Loginname, Password, Alias, E-mailadressen, 
    # Office, Company, Manager, Member of, Adresse, PLZ, Wohnort, diverse Telefonnummern
    
    Do	{
    	$MAAbfrage = read-host '
    	Wählen Sie eine Berechtigungsstufe!
    	1 --> Mitarbeiter
    	2 --> Praktikant
    	Eingabe: '
    
    	switch ($MAAbfrage)
    		{
    		"1" {$MALevel = 'Mitarbeiter'; }
    		"2" {$MALevel = 'Praktikant'; }
    		default {"Bitte nur 1 für 'Mitarbeiter' oder 2 für 'Praktikant' wählen!"}
    		}
    	}
    Until ($MAAbfrage -le "2")
    
    $Vorname = read-host '
    	Vorname eingeben!
    	Eingabe: '
    $Nachname = read-host '
    	Nachname eingeben!
    	Eingabe: '
    $Strasse = Read-Host '
    	Adresse eingeben!
    	Eingabe: '
    $PLZ = Read-Host '
    	Postleitzahl eingeben!
    	Eingabe: '
    $City = Read-Host '
    	Wohnort eingeben!
    	Eingabe: '
    $Phone = Read-Host '
    	Nummer im Firmennetz eingeben: 
    	Eingabe: '
    $HomePhone = Read-Host '
    	Private Festnetznummer eingeben:
    	Eingabe: '
    $Mobil = Read-Host '
    	Private Handynummer eingeben:
    	Eingabe: '
    $Name = $Vorname + ' ' + $Nachname	#$Name hat damit das Format "Vorname Nachname"
    Do	{	
    	$OrtAbfrage = read-host	'
    	Standort bestimmen:
    	1 --> Berlin
    	2 --> Hamburg
    	Eingabe: '
    	
    	switch ($OrtAbfrage) 
    		{
    		"1" {$Ort = 'Berlin' ;
    				If ($MALevel -eq "Praktikant")
    					{$OUStandort = 'Berlin/Praktikanten'}
    				Else 
    					{Do	
    						{$AbtAbfrage = read-host	'
    	Welche Abteilung?
    	1 --> IT
    	2 --> Praktikanten
    	3 --> Verwaltung
    	Eingabe: '
    											
    						switch ($AbtAbfrage)
    							{
    							"1"	{$OUStandort = 'Berlin/IT'}
    							"2"	{$OUStandort = 'Berlin/Praktikanten'}
    							"3"	{$OUStandort = 'Berlin/Verwaltung'}
    							default {"Bitte eine verfügbare Abteilung wählen!"}
    							}
    						}
    					Until ($AbtAbfrage -le "3")
    					}
    			}
    		"2" {$Ort = 'Hamburg';
    				If ($MALevel -eq "Praktikant")
    					{$OUStandort = 'Hamburg/Praktikanten'}
    				Else 
    					{Do	
    						{$AbtAbfrage = read-host	'
    	Welche Abteilung?
    	1 --> IT
    	2 --> Praktikanten
    	3 --> Verwaltung
    	Eingabe: '
    											
    						switch ($AbtAbfrage)
    							{
    							"1"	{$OUStandort = 'Hamburg/IT'}
    							"2"	{$OUStandort = 'Hamburg/Praktikanten'}
    							"3"	{$OUStandort = 'Hamburg/Verwaltung'}
    							default {"Bitte eine verfügbare Abteilung wählen!"}
    							}
    						}
    					Until ($AbtAbfrage -le "3")
    					}
    			}
    		default {"Bitte nur einen der Standorte Berlin oder Hamburg wählen!"}
    		}
    	}
    	Until ($OrtAbfrage -le "2")
    	
    $Organisationseinheit = "bsp.musterfirma.de/$OUStandort"
    $Alias = $Nachname.tolower()
    $Passwort = read-host '
    	Passwort eingeben!
    	Eingabe: ' -AsSecureString
    $Domaene = '@musterfirma.de'
    $Punktname = $Vorname.tolower() + '.' + $Alias	#Hat die Form "max.mustermann".
    $Loginname = $Vorname.tolower()[0] + $Alias		#Hat die Form "mmustermann".
    $UPN = $Loginname + $Domaene			#Hat die Form "mmustermann@musterfirma.de
    Do	{
    	$ManAbfrage = read-host '
    	Wählen Sie den Vorgesetzten!
    	1 --> John
    	2 --> Jack
    	3 --> James
    	Eingabe: '
    
    	switch ($ManAbfrage)
    		{
    		"1" {$Manager = 'John Smith'; }
    		"2" {$Manager = 'Jack Jackson'; }
    		"3" {$Manager = 'James Deen'; }
    		default {"Drücken sie eine der Tasten 1 bis 3!"}
    		}
    	}
    Until ($ManAbfrage -le "3")
    $mailboxdatabase = get-mailboxdatabase	#Gilt nur, wenn es in der Firma nur eine MBDB gibt.
    					#Bei mehreren MBDBs muss natürlich die richtige angegeben werden.
    #User-Mailbox anlegen und erste Daten befüllen.
    New-Mailbox -database $mailboxdatabase -name $Name -Password $Passwort -UserPrincipalName $UPN -Alias $Alias -Displayname $Name -Firstname $Vorname -Lastname $Nachname -OrganizationalUnit $Organisationseinheit -ResetPasswordonnextlogon $false
    #Restliche Daten einfüllen.
    Set-User -identity $Name -company "Musterfirma GmbH" -Office $Ort -Manager $Manager -City $City -HomePhone $HomePhone -MobilPhone $Mobil -Phone $Phone -PostalCode $PLZ -StreetAddress $Strasse
    
    
    $Mailbox = get-mailbox -identity $Name
    if ($MALevel -eq 'Mitarbeiter')				 #Hier bekommen Mitarbeiter ggü. Praktikanten
    	{$Mailbox.emailaddresses.add("smtp:$Punktname$Domaene")} #die E-Mail-Adr.: max.mustermann@musterfirma.de
    else {}
    $Mailbox.emailaddresses.add("smtp:$Loginname$Domaene")
    Set-Mailbox -Instance $Mailbox
    
    if ($MALevel -eq 'Mitarbeiter')
    	{Add-DistributionGroupMember -Identity "Mitarbeiter" -Member $Name} #Mitarbeiter werden hier vorab der AD-Gruppe 'Mitarbeiter' hinzugefügt,
    else {Add-DistributionGroupMember -Identity "Praktikanten" -Member $Name}  #Praktikanten der Gruppe Praktikanten.
    
    if ($AbtAbfrage -eq "2")
    	{Add-DistributionGroupMember -Identity "IT" -Member $Name}	  #Egal ob Praktikant oder Mitarbeiter, alle aus der IT-Abteilung
    else {}								  #kommen in die IT-Gruppe
    • Als Antwort markiert B_inside Dienstag, 27. Juli 2010 08:35
    Dienstag, 27. Juli 2010 08:34

Alle Antworten

  • Hallo,

    gib mal in der EMS "get-user" ein. Damit kommst Du an das AD Objekt über die EMS. Theoretisch könntest Du auch über das .Net Framework gehen.

    ACHTUNG UNGETESTET!

    $user = get-user hugo
    $ad = new-object System.DirectoryServices.DirectoryEntry LDAP://deindac.deinedom.de/($user.distinguishedname)
    $ad = $ad.psbase
    $ad.invokeset("description","Deine Beschreibung")
    $ad.commitchanges()
    $ad.close()

    Damit kommst Du auch an alle Eigenschaften ran.

    Viele Grüße

    Frank


    -- Frank Röder MVP Directory Services blog.iteach-online.de --
    Donnerstag, 22. Juli 2010 04:22
  • Hallo Frank,

    erstmal vielen Dank für deine Antwort. Grundsätzlich scheint das mein Problem zu lösen. Das man so einfach mit get-user auch ans AD rankommt konnte ich mir nicht vorstellen. PowerShell hat mich schon mehrfach mit seiner Einfachheit überrascht. =)

    Dein Script stockt bei mir allerdings in der 2. Zeile und die erschließt sich mir auch nicht ganz. Ich lade in die Variable $ad ein neues Objekt, das woher kommt? System.DirectoryServices.DirectoryEntry soll eine Verbindung zum Active Directory anlegen. Allerdings erhalte ich bei

    $ad = new-object System.DirectoryServices.DirectoryEntry LDAP://deindac.deinedom.de/($user.distinguishedname)

    die fehlermeldung

    New-Objetct: A parameter cannot be found that matches parameter name 'CN=Max Mustermann,OU=Technik,DC=bsp,DC=example,DC=de'.

    Der User existiert bereits. Was genau findet er dort nicht?

    Donnerstag, 22. Juli 2010 13:35
  • Ok ich habe einen anderen Weg gefunden. Die Lösung sieht in etwa so aus:

    # Script zur Erstellung eines neuen Exchange- und Active Directory Users
    
    # Features:
    # Neue Mailbox für einen User
    # Unterscheidung zwischen Mitarbeiter und Praktikant
    # Unterscheindung zwischen den Standorten und Abteilungen
    # Automatische Eingabe von Organisationseinheit, Vorname, Nachname, Loginname, Password, Alias, E-mailadressen, 
    # Office, Company, Manager, Member of, Adresse, PLZ, Wohnort, diverse Telefonnummern
    
    Do	{
    	$MAAbfrage = read-host '
    	Wählen Sie eine Berechtigungsstufe!
    	1 --> Mitarbeiter
    	2 --> Praktikant
    	Eingabe: '
    
    	switch ($MAAbfrage)
    		{
    		"1" {$MALevel = 'Mitarbeiter'; }
    		"2" {$MALevel = 'Praktikant'; }
    		default {"Bitte nur 1 für 'Mitarbeiter' oder 2 für 'Praktikant' wählen!"}
    		}
    	}
    Until ($MAAbfrage -le "2")
    
    $Vorname = read-host '
    	Vorname eingeben!
    	Eingabe: '
    $Nachname = read-host '
    	Nachname eingeben!
    	Eingabe: '
    $Strasse = Read-Host '
    	Adresse eingeben!
    	Eingabe: '
    $PLZ = Read-Host '
    	Postleitzahl eingeben!
    	Eingabe: '
    $City = Read-Host '
    	Wohnort eingeben!
    	Eingabe: '
    $Phone = Read-Host '
    	Nummer im Firmennetz eingeben: 
    	Eingabe: '
    $HomePhone = Read-Host '
    	Private Festnetznummer eingeben:
    	Eingabe: '
    $Mobil = Read-Host '
    	Private Handynummer eingeben:
    	Eingabe: '
    $Name = $Vorname + ' ' + $Nachname	#$Name hat damit das Format "Vorname Nachname"
    Do	{	
    	$OrtAbfrage = read-host	'
    	Standort bestimmen:
    	1 --> Berlin
    	2 --> Hamburg
    	Eingabe: '
    	
    	switch ($OrtAbfrage) 
    		{
    		"1" {$Ort = 'Berlin' ;
    				If ($MALevel -eq "Praktikant")
    					{$OUStandort = 'Berlin/Praktikanten'}
    				Else 
    					{Do	
    						{$AbtAbfrage = read-host	'
    	Welche Abteilung?
    	1 --> IT
    	2 --> Praktikanten
    	3 --> Verwaltung
    	Eingabe: '
    											
    						switch ($AbtAbfrage)
    							{
    							"1"	{$OUStandort = 'Berlin/IT'}
    							"2"	{$OUStandort = 'Berlin/Praktikanten'}
    							"3"	{$OUStandort = 'Berlin/Verwaltung'}
    							default {"Bitte eine verfügbare Abteilung wählen!"}
    							}
    						}
    					Until ($AbtAbfrage -le "3")
    					}
    			}
    		"2" {$Ort = 'Hamburg';
    				If ($MALevel -eq "Praktikant")
    					{$OUStandort = 'Hamburg/Praktikanten'}
    				Else 
    					{Do	
    						{$AbtAbfrage = read-host	'
    	Welche Abteilung?
    	1 --> IT
    	2 --> Praktikanten
    	3 --> Verwaltung
    	Eingabe: '
    											
    						switch ($AbtAbfrage)
    							{
    							"1"	{$OUStandort = 'Hamburg/IT'}
    							"2"	{$OUStandort = 'Hamburg/Praktikanten'}
    							"3"	{$OUStandort = 'Hamburg/Verwaltung'}
    							default {"Bitte eine verfügbare Abteilung wählen!"}
    							}
    						}
    					Until ($AbtAbfrage -le "3")
    					}
    			}
    		default {"Bitte nur einen der Standorte Berlin oder Hamburg wählen!"}
    		}
    	}
    	Until ($OrtAbfrage -le "2")
    	
    $Organisationseinheit = "bsp.musterfirma.de/$OUStandort"
    $Alias = $Nachname.tolower()
    $Passwort = read-host '
    	Passwort eingeben!
    	Eingabe: ' -AsSecureString
    $Domaene = '@musterfirma.de'
    $Punktname = $Vorname.tolower() + '.' + $Alias	#Hat die Form "max.mustermann".
    $Loginname = $Vorname.tolower()[0] + $Alias		#Hat die Form "mmustermann".
    $UPN = $Loginname + $Domaene			#Hat die Form "mmustermann@musterfirma.de
    Do	{
    	$ManAbfrage = read-host '
    	Wählen Sie den Vorgesetzten!
    	1 --> John
    	2 --> Jack
    	3 --> James
    	Eingabe: '
    
    	switch ($ManAbfrage)
    		{
    		"1" {$Manager = 'John Smith'; }
    		"2" {$Manager = 'Jack Jackson'; }
    		"3" {$Manager = 'James Deen'; }
    		default {"Drücken sie eine der Tasten 1 bis 3!"}
    		}
    	}
    Until ($ManAbfrage -le "3")
    $mailboxdatabase = get-mailboxdatabase	#Gilt nur, wenn es in der Firma nur eine MBDB gibt.
    					#Bei mehreren MBDBs muss natürlich die richtige angegeben werden.
    #User-Mailbox anlegen und erste Daten befüllen.
    New-Mailbox -database $mailboxdatabase -name $Name -Password $Passwort -UserPrincipalName $UPN -Alias $Alias -Displayname $Name -Firstname $Vorname -Lastname $Nachname -OrganizationalUnit $Organisationseinheit -ResetPasswordonnextlogon $false
    #Restliche Daten einfüllen.
    Set-User -identity $Name -company "Musterfirma GmbH" -Office $Ort -Manager $Manager -City $City -HomePhone $HomePhone -MobilPhone $Mobil -Phone $Phone -PostalCode $PLZ -StreetAddress $Strasse
    
    
    $Mailbox = get-mailbox -identity $Name
    if ($MALevel -eq 'Mitarbeiter')				 #Hier bekommen Mitarbeiter ggü. Praktikanten
    	{$Mailbox.emailaddresses.add("smtp:$Punktname$Domaene")} #die E-Mail-Adr.: max.mustermann@musterfirma.de
    else {}
    $Mailbox.emailaddresses.add("smtp:$Loginname$Domaene")
    Set-Mailbox -Instance $Mailbox
    
    if ($MALevel -eq 'Mitarbeiter')
    	{Add-DistributionGroupMember -Identity "Mitarbeiter" -Member $Name} #Mitarbeiter werden hier vorab der AD-Gruppe 'Mitarbeiter' hinzugefügt,
    else {Add-DistributionGroupMember -Identity "Praktikanten" -Member $Name}  #Praktikanten der Gruppe Praktikanten.
    
    if ($AbtAbfrage -eq "2")
    	{Add-DistributionGroupMember -Identity "IT" -Member $Name}	  #Egal ob Praktikant oder Mitarbeiter, alle aus der IT-Abteilung
    else {}								  #kommen in die IT-Gruppe
    • Als Antwort markiert B_inside Dienstag, 27. Juli 2010 08:35
    Dienstag, 27. Juli 2010 08:34