PowerShell - Existiert die Email-Adresse bereits?
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:
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
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
Das ganze habe ich in etwa so angelegt:
$Domaene = '@bspdomain.de'
$Vorname = read-host '
Vorname eingeben!
Eingabe '
$Nachname = read-host '
Nachname eingeben!
Eingabe '
$Name = $Vorname + ' ' + $Nachname
$Alias = $Nachname.tolower()
$Punktname = $Vorname.tolower() + '.' + $Alias
$Loginname = $Vorname.tolower() + $Alias
$Mailbox = get-mailbox -identity $Name
$Mailbox.emailaddresses.add("smtp:$Punktname$Domaene")
$Mailbox.emailaddresses.add("smtp:$Loginname$Domaene")
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149271
Url: https://administrator.de/contentid/149271
Ausgedruckt am: 25.11.2024 um 22:11 Uhr
15 Kommentare
Neuester Kommentar
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
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
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.
So nun kannst du $counter dazu benutzen um die Mailaddresse zu erweitern.
Hoffe es war verständlich
Torsten
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.
[array]$mailbox = $Mailbox = get-mailbox -identity $Name
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
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
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
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
grüße
Torsten
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
Clear-Host
$vorname = Read-Host "Vorname eingeben `t"
$nachname = Read-Host "Nachname eingeben`t"
#Umlaute entfernen
$Vorname = $Vorname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss')
$Nachname = $Nachname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss')
$Alias = $Nachname.tolower()
$BspDomain = "bsp.domain.intern"
$Domain = "@fab.intern"
$Punktname = $Vorname.tolower() + '.' + $Alias
$Loginname = $Vorname.tolower() + $Alias
$UPN = $Loginname + '@' + $Bspdomain
$EMailpoint = $Punktname + $Domain
$EMaillogin = $Loginname + $Domain
$EMaildefault = $Alias + $Domain
[string]$filter = $alias + '*'
[array]$count = Get-Mailbox -Filter {alias -like $filter}
if ( $count.count -lt 1) {} else { $counter = $count.count + 1 }
Write-Host `n"es wird eine Mailbox mit folgenden Werten angelegt"`n
write-host "Vorname: `t" $Vorname `n"Nachname: `t" $Nachname `n"Alias: `t`t" $Alias
Write-Host "Domain: `t" $Domain `n"Punktname: `t" $Punktname `n"Loginname: `t" $Loginname$counter
write-host "UPN:`t`t" $UPN `n"Emailpoint: `t" $EMailpoint `n"EMaildefault: `t" $Emaildefault `n
#hier jetzt die new-mailbox anweisung ......
grüße
Torsten
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
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
abend
kurz und knapp
jetzt sollte es passen
grüße
torsten
kurz und knapp
Clear-Host
$Vorname = Read-Host "Vorname eingeben `t"
$Nachname = Read-Host "Nachname eingeben`t"
#Umlaute entfernen
$Vorname = $Vorname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss')
$Nachname = $Nachname.replace("ä",'ae').replace("ö",'oe').replace("ü",'ue').replace("Ä",'Ae').replace("Ö",'Oe').replace("Ü",'Ue').replace("ß",'ss')
$Alias = $Nachname.tolower()
$BspDomain = "bsp.domain.intern"
$Domain = "@fab.intern"
$Punktname = $Vorname.tolower() + '.' + $Alias
$Loginname = $Vorname.tolower() + $Alias
$UPN = $Loginname + '@' + $Bspdomain
$EMailpoint = $Punktname + $Domain
$EMaillogin = $Loginname + $Domain
$EMaildefault = $Alias + $Domain
# alle Mailboxen die $Alias enthalten und optional eine Nummer haben (max 2stellig)
[array]$count = Get-Mailbox | where {$_.alias -match "\b$alias\d{0,2}\b" }
Write-Host `n"Folgende Mailboxen enthalten den Alias $Alias" `n
$count
if ( $count.count -lt 1) {} else { $counter = $count.count + 1 }
Write-Host `n"es wird eine Mailbox mit folgenden Werten angelegt"`n
write-host "Vorname: `t" $Vorname
Write-Host "Nachname: `t" $Nachname
Write-Host "Alias: `t`t" $Alias
Write-Host "Domain: `t" $Domain
Write-Host "Punktname: `t" $Punktname
Write-Host "Loginname: `t" $Loginname$counter
write-host "UPN:`t`t" $UPN
Write-Host "Emailpoint: `t" $EMailpoint
Write-Host "EMaildefault: `t" $Emaildefault
#hier jetzt die new-mailbox anweisung ......
jetzt sollte es passen
grüße
torsten