Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell - Existiert die Email-Adresse bereits?

Frage Entwicklung Batch & Shell

Mitglied: Binside

Binside (Level 1) - Jetzt verbinden

18.08.2010, aktualisiert 16:51 Uhr, 12685 Aufrufe, 15 Kommentare

Ich habe ein lauffähiges Script, dass einen neuen Exchange und AD-User erstellt und ihm 2 oder 3 (je nachdem ob Praktikant oder Mitarbeiter) Email-Adressen automatisch anlegt.

Das ganze habe ich in etwa so angelegt:

01.
  
02.
$Domaene = '@bspdomain.de' 
03.
$Vorname = read-host ' 
04.
	Vorname eingeben! 
05.
	Eingabe  ' 
06.
$Nachname = read-host ' 
07.
	Nachname eingeben! 
08.
	Eingabe  ' 
09.
 
10.
$Name = $Vorname + ' ' + $Nachname	 
11.
$Alias = $Nachname.tolower() 
12.
$Punktname = $Vorname.tolower() + '.' + $Alias 
13.
$Loginname = $Vorname.tolower()[0] + $Alias 
14.
 
15.
$Mailbox = get-mailbox -identity $Name 
16.
$Mailbox.emailaddresses.add("smtp:$Punktname$Domaene") 
17.
$Mailbox.emailaddresses.add("smtp:$Loginname$Domaene") 
18.
Set-Mailbox -Instance $Mailbox
Außerdem bekommen alle Mitarbeiter, die eine neue Mailbox bekommen automatisch die E-Mail-Adresse "$Nachname$Domaene"
Das ganze funktionierte Recht gut, bis jetzt ein neuer Mitarbeiter bei uns anfing, dessen Nachname und erster Buchstabe des Vornamens denen eines anderen Mitarbeiters gleichen.
Damit würden beide identische Loginnamen und Nachnamen-Adressen bekommen, ergo das Script würde Fehler werfen. Nach Firmensystem soll der neue Mitarbeiter dann die Adressen "'$Loginname'2'$Domaene'" und "'Nachname'2'$Domaene'" bekommen.
Zum auslesen aller E-Mail-Adressen habe ich

01.
get-recipient -filter "Emailaddresses -like '*$Domaene' -and recipienttype -eq 'UserMailbox'" | select "emailaddresses"
genommen, jedoch scheitere ich an dem Vergleich. Das ändern der E-Mails sollte dann eigentlich kein Problem sein, der Loginname selbst ist auch noch so ne Sache... aber das könnte theoretisch analog abgehandelt werden.
Hat jemand eine Idee für den Vergleich?

MfG /B_out
Mitglied: filippg
18.08.2010 um 21:02 Uhr
Hallo,

mal ganz blöd gefragt: Warum lässt du das nicht über E-mail Address Policies (EAP) erledigen? Die sind eigentlich dafür da.

Prüfen auf Existenz: dein get-recipient-Ansatz klingt vernünftig (auch wenn ich mir nicht sicher bin, ob EMail-aktivierte öffentliche Ordner damit gefunden werden). Ich würde im Filter gleich die ganze Adresse angeben, und dann abfragen, ob ein Recipient gefunden wurde. Grob gesagt: $exist = (get-recipient -filter "Emailaddresses -like '*$Loginname$Domaene'").count

Gruß

Filipp
Bitte warten ..
Mitglied: 5t8d1e
19.08.2010 um 09:12 Uhr
Hallo,
ungetestet da gerade kein Exchange server bei der Hand.
Hatte vor kurzem ein Skript gebastelt mit 500 Vornamen und 100 Nachnamen, welches mir zufallsbasiert Accounts und Postfächer angelegt hatte. Hatte daher auch solch ähnliche Probleme. Ich habe mit folgenden Codeschnipsel das ganze abgefangen.

01.
[array]$mailbox = $Mailbox = get-mailbox -identity $Name  
02.
IF ($Mailbox.count -ge 1) { $counter = $Mailbox.Count + 1} 
So nun kannst du $counter dazu benutzen um die Mailaddresse zu erweitern.

Hoffe es war verständlich

Torsten
Bitte warten ..
Mitglied: Binside
19.08.2010 um 09:58 Uhr
Hallo filippg,

ich musste gerade lange über deine erste Zeile nachdenken. Die bezieht sich sicher auf meine Aussage, dass ich die E-Mail-Adressen per Shell hinzufüge und nicht per EAP richtig? Mit der Prüfung obs die Mail-Addy schon gibt, hat das nichts zu tun nein? Weil ich im EAP keine solche Funktion gefunden habe einzustellen, was passiert, wenn es die Mail-Adresse schon gibt.

Zu deiner Frage, warum wir die Adressen nicht über die EAP erstellen lassen: Wir unterscheiden in unserer Firma zwischen Mitarbeitern und Praktikanten, wobei die Praktikanten nur 2 Mail-Adressen bekommen und Mitarbeiter 3. Über die EAP könnte ich nun "State or Province, Department, Company oder einen der 15 Custom-Attribute als Unterscheidungsmerkmal nutzen. Da nur ein Custom-Attribut in Frage kommt, in dem dann Mitarbeiter oder Praktikant stehen müsste das während der Erstellung der neuen Mailbox (und damit des neuen Users) geschehen. Da ich aber in der Shell einfach eine Variable $MALevel deklarieren kann und die ganz zu Anfang des Scriptes per Switch-Anweisung abfrage kann ich alle Exchange- und Active-Directory-Einstellungen für Mitarbeiter und Praktikanten in einem Script abarbeiten ohne extra auf Custom-Attribute ausweichen zu können. Und die reine Erstellung der E-Mail-Adressen ist nur:

01.
$Mailbox = get-mailbox -identity $Name 
02.
if ($MALevel -eq 'Mitarbeiter') 
03.
	{$Mailbox.emailaddresses.add("smtp:$Punktname$Domaene")} 
04.
else {} 
05.
$Mailbox.emailaddresses.add("smtp:$Loginname$Domaene") 
06.
Set-Mailbox -Instance $Mailbox
Ich habs im Code oben nur vereinfacht um meine Frage so klar wie möglich zu halten. Bei der Erstellung der Mailbox wird übrigens die Mail-Adresse alias(=Nachname)@domain.de standardmäßig gesetzt, deshalb kommt sie in dem Script erst garnicht vor.

E-Mail-aktivierte öffentliche Ordner sind bei uns nicht in Gebrauch. der Codeschnipsel klingt vielversprechend, hat aber im ersten schnellen Test kein Ergebnis gebracht. Ich experimentier noch ein wenig weiter. Danke erstmal für deine Mühe.

MfG /B_out
Bitte warten ..
Mitglied: Binside
19.08.2010 um 10:54 Uhr
Hallo Torsten,

vielen Dank, das hat schon Mal super geklappt. Nur für mein Verständnis, Du speicherst unter $Mailbox die Mailbox des $Name. $Name ist bei mir Vorname + Leerzeichen + Nachname, was laut "get-help get-mailbox -detailed" zur Identität nicht reicht. Allerdings könnte ich dort den Alias nehmen.
D.H.

Namen eingeben lassen
Alias aus namen erstellen
Mailbox mit dem Alias suchen
wenn mailbox mit alias gefunden wurde, emailadresse und loginname dementsprechend ändern
mailbox erstellen
emailadressen hinzufügen.

vielen Dank, ich werd das gleich mal ausprobieren.
Bitte warten ..
Mitglied: 5t8d1e
19.08.2010 um 11:37 Uhr
Ahoi,

also PoSh ist ja ein ganz cleveres Konstrukt. Wenn get-mailbox nur ein Objekt findet bekommst du auch nur ein Objekt vom Typ Mailbox zurück. Das Problem ist sowas läßt sich nicht zählen.

Was ich mache, ist mit [array]$mailbox der PoSh mitzuteilen das $mailbox ein Array ist. In einem Array lassen sich nun die einzelnen Objekte zählen.

Torsten
Bitte warten ..
Mitglied: Binside
19.08.2010 um 11:42 Uhr
Hallo,

ok so weit hab ich das verstanden. Was mich jetzt noch interessieren würde bei [array]$mailbox = $Mailbox schreibst du mailbox einmal groß und einmal klein. Ist das gewollt, vertippt oder unerheblich? Nachdem was ich bisher getestet habe damit scheint es unerheblich zu sein.

MfG /B_out
Bitte warten ..
Mitglied: 5t8d1e
19.08.2010 um 12:02 Uhr
ahoi

ja ich bin tippfaul und ist nicht gewollt. in der PoSh ist die Groß/kleinschreibung bei Variablenname unerheblich. Leider steht auch kein Lektor hinter mir, dass halt sowas immer wieder vorkommt


grüße torsten
Bitte warten ..
Mitglied: Binside
20.08.2010 um 08:53 Uhr
Ok ich habs jetzt hinbekommen. War ein bisschen frickelarbeit und geteste woran Exchange die Standardmail festmacht (so wies aussieht nämlich am Alias). Wenn Bedarf an meiner Lösung besteht, poste ich sie hier natürlich gerne, ansonsten vielen Dank an Torsten und auch an filippg.

Kleines Manko an der Lösung:

Wenn er nach einer Mailbox fahndet, die es noch nicht gibt (was ja kein Problem ist, weil er sie danach ja neu anlegt) dann wirft er natürlich erstmal ne Fehlermeldung. Das tut zwar dem Script nicht weh, verunsichert aber eventuelle andere Nutzer des Scriptes.

MfG /B_out
Bitte warten ..
Mitglied: 5t8d1e
24.08.2010 um 10:44 Uhr
Ahoi binside,

jep schicke mal das Skript, ich denke das abfangen der Fehlermeldung sollte möglich sein.

Torsten
Bitte warten ..
Mitglied: Binside
24.08.2010 um 11:29 Uhr
01.
#Änderungen bei gleichem Login/Nachnamen 
02.
#Snippet aus dem ADExchangeUserScript.ps1 
03.
 
04.
#Vorname 
05.
	$Vorname = read-host ' 
06.
	Vorname eingeben! 
07.
	 
08.
	Eingabe  ' 
09.
	cls 
10.
#Nachname 
11.
	$Nachname = read-host ' 
12.
	Nachname eingeben! 
13.
	 
14.
	Eingabe  ' 
15.
 
16.
#Variablendeklaration 
17.
	$Bspdomain = "bsp.domain.de" 
18.
	$Domain = "@domain.de" 
19.
	$Name = $Vorname + ' ' + $Nachname 
20.
	$Firstname = $Vorname 
21.
	$Lastname = $Nachname 
22.
	$Vorname = $Vorname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
23.
	$Nachname = $Nachname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
24.
	$Alias = $Nachname.tolower() 
25.
	$Punktname = $Vorname.tolower() + '.' + $Alias 
26.
	$Loginname = $Vorname.tolower()[0] + $Alias 
27.
	$UPN = $Loginname + '@' + $Bspdomain 
28.
	$EMailpoint = $Punktname + $Domain 
29.
	$EMaillogin = $Loginname + $Domain 
30.
	$EMaildefault = $Alias + $Domain 
31.
 
32.
#Überprüfen ob es Name bzw. Loginname in der Form schon gibt: 
33.
	[array]$EMailAddy = $EMailAddy = get-mailbox -identity "$EMaildefault" 
34.
	[array]$EmailAddy2 = $EMailAddy2 = get-mailbox -identity "$EMaillogin" 
35.
	IF($EMailAddy2.Count -ge 1) 
36.
37.
		$Counter = $EmailAddy2.Count + 1 
38.
		$Loginname = $Loginname + $Counter 
39.
		$UPN = $Loginname + '@' $Bspdomain 
40.
		$EMaildefault = $Nachname.tolower() + $Counter + $Domain 
41.
		$Emaillogin = $Loginname + $Domain 
42.
43.
	ELSEIF($EMailAddy.Count -ge 1) 
44.
45.
		$Counter = $EMailaddy.Couint + 1 
46.
		$EMaildefault = $Nachname.tolower() + $Counter + $Domain 
47.
		$EMaillogin = $Loginname + $Domain 
48.
		}
Interessant ist es eigentlich erst ab Zeile 33. Das davor ist zum besseren Verständnis. Zumindest hoffe ich, dass es dazu beiträgt.^^

MfG /B_out
Bitte warten ..
Mitglied: 5t8d1e
27.08.2010 um 13:11 Uhr
Ahoi,

hier eine Änderung, mit den Parameter - Filter für das cmdlet get-mailbox kommt nun keine Fehlermeldung mehr, wenn die Mailbox nicht vorhanden ist.

hoffe das Skript ist soweit verständlich, ansonsten versuche ich es gern zu erklären
01.
Clear-Host 
02.
$vorname = Read-Host "Vorname eingeben `t" 
03.
$nachname = Read-Host "Nachname eingeben`t" 
04.
 
05.
#Umlaute entfernen 
06.
$Vorname = $Vorname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
07.
$Nachname = $Nachname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
08.
$Alias = $Nachname.tolower() 
09.
$BspDomain = "bsp.domain.intern" 
10.
$Domain = "@fab.intern" 
11.
$Punktname = $Vorname.tolower() + '.' + $Alias 
12.
$Loginname = $Vorname.tolower()[0] + $Alias 
13.
$UPN = $Loginname + '@' + $Bspdomain 
14.
$EMailpoint = $Punktname + $Domain 
15.
$EMaillogin = $Loginname + $Domain 
16.
$EMaildefault = $Alias + $Domain 
17.
 
18.
[string]$filter = $alias + '*' 
19.
[array]$count =  Get-Mailbox -Filter {alias -like $filter} 
20.
if ( $count.count -lt 1) {}	else { $counter = $count.count + 1 } 
21.
 
22.
Write-Host  `n"es wird eine Mailbox mit folgenden Werten angelegt"`n 
23.
write-host "Vorname: `t" $Vorname `n"Nachname: `t" $Nachname `n"Alias: `t`t" $Alias 
24.
Write-Host "Domain: `t" $Domain `n"Punktname: `t" $Punktname `n"Loginname: `t" $Loginname$counter 
25.
write-host "UPN:`t`t" $UPN `n"Emailpoint: `t" $EMailpoint `n"EMaildefault: `t" $Emaildefault `n 
26.
 
27.
 
28.
#hier jetzt die new-mailbox anweisung ......

grüße
Torsten
Bitte warten ..
Mitglied: Binside
27.08.2010 um 13:40 Uhr
Ok soweit ich das verfolgen kann, erstellst du einen filter, in den alle mailboxes gesammelt werden, die den nachnamen des neuen users haben. und setzt dazu n counter auf den wert, wieviele user mit dem nachnamen schon existieren.
wenn der counter kleiner als 1 ist, d.h. wenn es keine weiteren mailboxen gibt, legt er den user ganz normal an,
ansonsten wird aus count eben count + 1 (einer mehr als es user mit dem nachnamen gibt) und das wird dann da eingesetzt.

dazu habe ich folgende fragen:

warum $alias + '*'? er filtert dann alles außer den nachnamen mit irgendwas dahinter? also was passiert, wenn prahlhans bei uns arbeitet und prahl fängt bei uns an? kriegt der dann den counter hinter $loginname und $emaillogin?

das gleiche müsste ich nun noch angepasst dazu für den gleichen login august müller = amüller und anton müller = amüller tun, richtig?


den rest habe ich denke ich verstanden. ach ist clear-host = cls? das hab ich glatt ausser cmd übernommen

danke dir

MfG /B_out
Bitte warten ..
Mitglied: 5t8d1e
27.08.2010 um 16:35 Uhr
ahoi

jep alles richtig verstanden. ausser das ich die mailboxen nach $alias plus wildcard filtere nicht nach den nachnamen (auch wenn es deiner namenskonvention entspricht).

damn jetzt seh ich es auch, ja meister prahl würde auch ein counter bekommen. Vielleicht fällt mir mal was dazu ein.

wenn du nen august müller hast und ein anton müller soll nachgepflegt werden, dann bekommt der anton auch nen counter

cls = clear = clear-host, naja wenn die PoSh was kennt ,dann sind das aliase.
und in skripten die man weiterreicht ist es halt besser die befehle auszuschreiben.

happy WE
Torsten
Bitte warten ..
Mitglied: 5t8d1e
27.08.2010 um 20:06 Uhr
abend

kurz und knapp
01.
Clear-Host 
02.
$Vorname = Read-Host "Vorname eingeben `t" 
03.
$Nachname = Read-Host "Nachname eingeben`t" 
04.
 
05.
#Umlaute entfernen 
06.
$Vorname = $Vorname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
07.
$Nachname = $Nachname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss') 
08.
$Alias = $Nachname.tolower() 
09.
$BspDomain = "bsp.domain.intern" 
10.
$Domain = "@fab.intern" 
11.
$Punktname = $Vorname.tolower() + '.' + $Alias 
12.
$Loginname = $Vorname.tolower()[0] + $Alias 
13.
$UPN = $Loginname + '@' + $Bspdomain 
14.
$EMailpoint = $Punktname + $Domain 
15.
$EMaillogin = $Loginname + $Domain 
16.
$EMaildefault = $Alias + $Domain 
17.
 
18.
# alle Mailboxen die $Alias enthalten und optional eine Nummer haben (max 2stellig) 
19.
[array]$count =  Get-Mailbox | where {$_.alias -match "\b$alias\d{0,2}\b" } 
20.
Write-Host `n"Folgende Mailboxen enthalten den Alias $Alias" `n 
21.
$count 
22.
if ( $count.count -lt 1) {}	else { $counter = $count.count + 1 } 
23.
Write-Host `n"es wird eine Mailbox mit folgenden Werten angelegt"`n 
24.
write-host "Vorname: `t" $Vorname 
25.
Write-Host "Nachname: `t" $Nachname 
26.
Write-Host "Alias: `t`t" $Alias 
27.
Write-Host "Domain: `t" $Domain  
28.
Write-Host "Punktname: `t" $Punktname  
29.
Write-Host "Loginname: `t" $Loginname$counter 
30.
write-host "UPN:`t`t" $UPN  
31.
Write-Host "Emailpoint: `t" $EMailpoint  
32.
Write-Host "EMaildefault: `t" $Emaildefault  
33.
 
34.
#hier jetzt die new-mailbox anweisung ......
jetzt sollte es passen

grüße
torsten
Bitte warten ..
Mitglied: Binside
03.08.2011 um 12:02 Uhr
Hallo 5t8d1e,

leider funktioniert es nicht so, wie du dir das vorgestellt hast. Das Ganze ist zwar vollkommen logisch, aber die

01.
[array]$count =  Get-Mailbox | where {$_.alias -match "\b$alias\d{0,2}\b" } 
Anweisung gibt schlicht garnichts zurück. Die Variable ist leer. Auch wenn ich nicht zähle sondern mir die Mailbox direkt ausgeben lassen will, kommt nichts dabei heraus. Ich weiß lange her, aber evtl kannst du dir nochmal ansehen, obs bei dir geht.


EDIT:
Ändere ich den Code soweit ab dass nur

01.
[array]$count =  Get-Mailbox | where {$_.alias -match "$alias" } 
stehenbleibt, gibt er die Mailboxen zurück. Inzwischen wollen wir auch keine Zahlen mehr anhängen sondern den Alias manuell ändern lassen. Vielen Dank dir nochmal für deine Mühen.

grüße /B_out
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
Exchange 2013 - Primäre eMail Adresse ändern (7)

Frage von staybb zum Thema Exchange Server ...

Windows Server
gelöst Wie füge ich diesem Script die Email Adresse hinzu (16)

Frage von rainergugus zum Thema Windows Server ...

Exchange Server
gelöst SBS 2011 - anlegen einer email adresse auf exchange (12)

Frage von jensgebken zum Thema Exchange Server ...

Windows 7
gelöst Bereits eingebundener Drucker - IP Adresse lokal auslesen (17)

Frage von harald.schmidt zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...