gelbeseiten
Goto Top

Zusätzliche E-Mail Adresse zu einer bestehenden via Powershell hinzufügen

Hallo,

wir ändern demnächst undere E-Mail- und Web-Domäne. Ich möchte für einen bestimmten Zeitraum beide E-Mail Adressen auf einem Postfach behalten.
Wir haben ca. 150 Postfächer, bei denen das geändert werden muss.
Ich habe bisher folgendes Script, um die set as reply address zu setzen:

get-mailbox -database Exchange_DB| select Name,PrimarySMTPAddress | export-csv c:\temp\mbx_primarysmtp.csv -Encoding Unicode -Delimiter ";"
dann setze ich manuel via notepad und find and replace die richtige Adresse ein

Vorher:
TYPE Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
"Name";"PrimarySmtpAddress"
Ben1; ben1@alte-domaene.de
Ben2; Ben2@alte-domaene.de
Ben3; Ben3@alte-domaene.de
Ben4; Ben4@alte-domaene.de
etc.

TYPE Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
"Name";"PrimarySmtpAddress"
Ben1; ben1@neu-domaene.de
Ben2; Ben2@neu-domaene.de
Ben3; Ben3@neu-domaene.de
Ben4; Ben4@neu-domaene.de
etc.

Dann lese ich die csv Datei wieder ein:

Import-Csv c:\temp\mbx_primarysmtp.csv -Delimiter ";" | foreach-object {set-mailbox $_.Name -EmailAddresses $_.PrimarySMTPAddress -EmailAddressPolicyEnabled $False}

und lasse mir das Resultat wieder ausgeben:
Get-mailbox -database Exchange_DB | select Name,PrimarySMTPAddress,secondarysmtpaddress

Name PrimarySmtpAddress
------------------
ben1 ben1@neu-domaene.de
ben2 ben2@neu-domaene.de
ben3 ben3@neu-domaene.de
ben4 ben4@neu-domaene.de

Das läuft auch alles wunderbar!
Nur, wollen wir übergangsweise die alte E-Mail Adresse behalten.
So dass im Resultat jenes herauskommen muss:

Name PrimarySmtpAddress Secondarysmtpaddress
-------- ------------ ------------------
ben1 ben1@neu-domaene.de ben1@alte-domaene.de
ben2 ben2@neu-domaene.de ben2@alte-domaene.de
ben3 ben3@neu-domaene.de ben3@alte-domaene.de
ben4 ben4@neu-domaene.de ben4@alte-domaene.de

Hat da jemand einen Lösungsansatz? Oder gar eine Lösung?

Danke!

Gruß
Volkmar

Content-Key: 238336

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

Ausgedruckt am: 29.03.2024 um 15:03 Uhr

Mitglied: Dani
Dani 16.05.2014 um 20:39:59 Uhr
Goto Top
Guten Abend Volkmar,
dafür gibt es eigentlich die E-Mailaddress-Policy. Dort einfach die zweite Domain hinzufügen und die Sache ist erledigt. Setzt natürlich vorraus, dass du ein einheitliches Namensschema hast, was bei 150 Postfächern sicher gegeben ist.


Grüße,
Dani
Mitglied: gelbeseiten
gelbeseiten 16.05.2014, aktualisiert am 17.05.2014 um 10:40:40 Uhr
Goto Top
Hi Dani!

Danke für Deine Antwort,
Ja, wir haben auch Policies im Einsatz, kann das aber ich nicht einsetzen, da wir verschiede Datenbanken haben und es eben nur auf eine Datenbank anwendung finden darf. Ist etwas kompliziert es hier zu schreiben.
Da wäre mir mit einem Powershellscript eher geholfen =(

danke!
Gruß
Volkmar
Mitglied: colinardo
colinardo 16.05.2014, aktualisiert am 17.05.2014 um 09:02:52 Uhr
Goto Top
Hallo Volkmar,
z.B. so
$mailboxes = Get-mailbox -database Exchange_DB
$mailboxes | %{set-mailbox $_.Name -EmailAddresses @{add="$($_.PrimarySmtpAddress.local)@altedomain.com"} -EmailAddressPolicyEnabled $False}  
Das Script nimmt den Prefix der neuen primären Mailadresse und baut mit dem alten Domänennamen die alte Adresse zusammen, welche dann dem Postfach mit einer Hashtable und dem Keyword "add" dem Postfach hinzugefügt wird.

siehe auch: http://www.mikepfeiffer.net/2011/12/how-to-add-exchange-proxy-addresses ...

Grüße Uwe
Mitglied: gelbeseiten
gelbeseiten 17.05.2014 um 10:30:41 Uhr
Goto Top
Hi Uwe,

danke für deine Hilfe!

Ich habe vergessen zu sagen, dass wir einen Exchange 2007 SP3 Version: 08.03.0342.000 haben, da gibt es so einige Möglichkeiten noch nicht =(

Ich bekomme Fehlermeldungen bei Ausführen des Scripts.
=(

So wie ich die Seite verstehe, ist es für einen Exchange 2010.

Danke!
Gruß
Volkmar
Mitglied: colinardo
colinardo 17.05.2014, aktualisiert am 18.05.2014 um 16:47:55 Uhr
Goto Top
OK, dann mach es halt so:
(Wenn die Mailboxen schon die neue Primäre Adresse enthalten)
$mailboxes = Get-mailbox -database Exchange_DB 
$mailboxes | %{set-mailbox $_.Name -EmailAddresses ("smtp:$($_.PrimarySmtpAddress.toString())","smtp:$($_.PrimarySmtpAddress.local)@altedomain.de")}  
-edit- upgedated ...

Grüße Uwe
Mitglied: gelbeseiten
gelbeseiten 17.05.2014 um 12:38:27 Uhr
Goto Top
Hi Uwe,

danke für Deine Hilfe!

Ich habe das Script so angepasst, aber irgendwas mache ich falsch, oder ich bin zu d..f! =)

Import-Csv c:\temp\mbx_primary-Secondary.csv -Delimiter ";" | foreach-object {set-mailbox $_.Name -EmailAddresses $_.PrimarySMTPAddress, $_.SecondarySMTPAddress -EmailAddressPolicyEnabled $False}

Die CSV Datei sieht so aus:
#TYPE Selected.Microsoft.Exchange.Data.Directory.Management.Mailbox
"Name";"PrimarySmtpAddress";"secondarySMTPAddress"
"ben3";"ben3@neue-domaene.de";"ben3@alte-domaene.de"
"ben1";"ben1@neue-domaene.de";"ben1@alte-domaene.de"
"ben4";"ben4@neue-domaene.de";"ben4@alte-domaene.de"
"ben2";"ben2@neue-domaene.de";"ben2@alte-domaene.de "


Letztendlich kommt diese Fehlermeldung in der Powershell und in den Eigenschaften des Benutzers befindet sich die alte E-Mail Adresse „@alte-domaene.de“

Set-Mailbox : Cannot convert '
ben3@alte-domaene.de' to the type 'Microsoft.Exchange.Data.ProxyAddressCollection
' required by parameter 'EmailAddresses'. Cannot perform this operation with th
e address '
ben3@alte-domaene.de' because it is invalid: The address '
ben3@alte-domaene.de ' is not a valid SMTP address, so a prefix must be specified.
At C:\Scripts\SMTP-Aenderung\SMTP-cmdlet.ps1:19 char:114

back-to-topImport-Csv c:\temp\mbx_primary-Secondary.csv -Delimiter ";" | foreach-object

{set-mailbox $_.Name -EmailAddresses <<<< $_.PrimarySMTPAddress, $_.SecondaryS
MTPAddress -EmailAddressPolicyEnabled $False}
+ CategoryInfo : InvalidArgument: (face-smile [Set-Mailbox], ParameterBin
dingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.Exchange.Managem
ent.RecipientTasks.SetMailbox

Hast Du noch eine Idee, was das Problem sein kann?
Ich müsste ja eigentlich auch mit zwei csv Dateien arbeiten, denn alle E-Mail Adressen in der csv Datei nach und nach eintragen, das dauert dann doch etwas lange, da könnte ich die Adressen wahrscheinlich auch manuell schneller ändern =(

Wahrscheinlich bin ich wirklich zu d..f =)

Danke Dir!
Mitglied: colinardo
colinardo 17.05.2014 aktualisiert um 15:09:57 Uhr
Goto Top
du hast die Klammern um die Mailadressen im Parameter -EMailAddresses vergessen. Habe es dir oben nochmal abgeändert (Nutzung einer calculated property) dann musst du nicht den Umweg über die CSV-Dateien gehen...
Mitglied: gelbeseiten
gelbeseiten 18.05.2014 aktualisiert um 16:13:56 Uhr
Goto Top
Hi Uwe,

danke Dir nochmals!

Aber, bekomme ich das nicht hin, jetzt bekomme ich diese Meldung, weiß aber nicht, wo das "=" fehlt:
$mailboxes = Get-mailbox -database Exchange_DB
$mailboxes | select Name,PrimarySmtpAddress,@{Name="SecondaryEmailAddress";e{"$($_.PrimarySmtpAddress.local)@alte-domaend.de"}} | %{set-Mailbox $_.Name -EmailAddresses ($_.PrimarySmtpAddress,$_.SecondarySmtpAddress) -EmailAddressPolicyEnabled $false}  

Missing '=' operator after key in hash literal.  
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:78
+ $mailboxes | select Name,PrimarySmtpAddress,@{Name="SecondaryEmailAddress";e{  
 <<<< "$($_.PrimarySmtpAddress.local)@alte-domaene.de"}} | %{set-Mailbox $_.Name  
-EmailAddresses ($_.PrimarySmtpAddress,$_.SecondarySmtpAddress) -EmailAddressPo
licyEnabled $false}
    + CategoryInfo          : ParserError: (:) , ParseException
    + FullyQualifiedErrorId : MissingEqualsInHashLiteral



Hier habe ich nach dem "e" das "=" Zeichen gesetzt:  
 
$mailboxes = Get-mailbox -database Echange_DB
$mailboxes | select Name,PrimarySmtpAddress,@{Name="SecondaryEmailAddress";e={"$($_.PrimarySmtpAddress.local)@alte-domaene.de"}} | %{set-Mailbox $_.Name -EmailAddresses ($_.PrimarySmtpAddress,$_.SecondarySmtpAddress) -EmailAddressPolicyEnabled $false}  


und ich bekam dann diese Meldung:

Set-Mailbox : Cannot bind parameter 'EmailAddresses'. Cannot convert the "ben3@  
neu-domaene.de" value of type "Microsoft.Exchange.Data.SmtpAddress" to type "  
Microsoft.Exchange.Data.ProxyAddress".  
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:167
+ $mailboxes | select Name,PrimarySmtpAddress,@{Name="SecondaryEmailAddress";e=  
{"$($_.PrimarySmtpAddress.local)@alte-domaene.de"}} | %{set-Mailbox $_.Name -Emai  
lAddresses <<<<  ($_.PrimarySmtpAddress,$_.SecondarySmtpAddress) -EmailAddressP
olicyEnabled $false}
    + CategoryInfo          : InvalidArgument: (:) [Set-Mailbox], ParameterBin
   dingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchang
   e.Management.RecipientTasks.SetMailbox

Set-Mailbox : Cannot bind parameter 'EmailAddresses'. Cannot convert the "ben1@  
neu-domaen.de" value of type "Microsoft.Exchange.Data.SmtpAddress" to type "  
Microsoft.Exchange.Data.ProxyAddress".  
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:167
+ $mailboxes | select Name,PrimarySmtpAddress,@{Name="SecondaryEmailAddress";e=  
{"$($_.PrimarySmtpAddress.local)@alte-domaene.de"}} | %{set-Mailbox $_.Name -Emai  
lAddresses <<<<  ($_.PrimarySmtpAddress,$_.SecondarySmtpAddress) -EmailAddressP
olicyEnabled $false}
    + CategoryInfo          : InvalidArgument: (:) [Set-Mailbox], ParameterBin
   dingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchang
   e.Management.RecipientTasks.SetMailbox

Danke Dir nochmals!

Gruß
Volkmar
Mitglied: colinardo
colinardo 18.05.2014 aktualisiert um 16:45:56 Uhr
Goto Top
OK, das Gleichheitszeichen hatte ich vergessen, dann lässt sich der Exchange 2007 doch etwas bitten ... das hier sollte dort auf jeden Fall funktionieren, gerade auf einen Exchange 2007 in einer VM getestet:
$mailboxes = Get-mailbox -database Exchange_DB
foreach($mailbox in $mailboxes){
	$EmailAddresses = $mailbox.EmailAddresses
	$EmailAddresses += "smtp:$($mailbox.PrimarySmtpAddress.local)@altedomain.com"  
	set-Mailbox $mailbox.Name -EmailAddresses $EmailAddresses -EmailAddressPolicyEnabled $false
}
und folgendes geht auch auf einem Exchange 2007:
$mailboxes = Get-mailbox -database Exchange_DB 
$mailboxes | %{set-mailbox $_.Name -EmailAddresses ("smtp:$($_.PrimarySmtpAddress.toString())","smtp:$($_.PrimarySmtpAddress.local)@altedomain.de") -EmailAddressPolicyEnabled $false}  
Grüße Uwe
Mitglied: gelbeseiten
gelbeseiten 18.05.2014 um 16:31:01 Uhr
Goto Top
Danke für Deinen Aufwand =)
Und das bei sei einem guten Wetter! =)

Ich habe Dein Script so kopiert und nur die Domaene angepasst und bekomme dann diese Meldung.

Unexpected token 'EmailAddresses' in expression or statement.
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:90

back-to-topforeach($mailbox in $mailboxes){$EmailAddresses = $mailbox.EmailAddresses $Em

ailAddresses <<<< += ($mailbox.PrimarySmtpAddress.local + "@alte-domaene.de") Se
t-Mailbox $mailbox.Name -EmailAddresses $EmailAddresses -EmailAddressPolicyEnab
led $false}
+ CategoryInfo : ParserError: (EmailAddresses:String) , ParseEx
ception
+ FullyQualifiedErrorId : UnexpectedToken

Wenn Du in der Nähe wärst würde ich Dich auf ein Bier einladen =)

Gruß
Volkmar
Mitglied: colinardo
colinardo 18.05.2014 aktualisiert um 16:34:26 Uhr
Goto Top
sorry, aber die Fehler müssen leider bei Dir liegen denn hier geht es einwandfrei ... mach mal ein Update deiner Powershell...
Mitglied: gelbeseiten
gelbeseiten 18.05.2014 um 16:47:34 Uhr
Goto Top
Kannst recht haben, ist habe die Powershell 2.0 drauf, ich versuche mal die 3.0 zu installieren, danke!
Ich melde mich!
Mitglied: gelbeseiten
gelbeseiten 18.05.2014 um 17:04:55 Uhr
Goto Top
So, aktualsiert
Jetzt bekomme ich diese Meldung:

Name : ConsoleHost
Version : 3.0
InstanceId : b24c46a7-e84d-46b3-b8b3-d1ca7eabefd7
UI : System.Management.Automation.Internal.Host.InternalHostUserI
nterface
CurrentCulture : de-DE
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace


[PS] C:\Scripts\SMTP-Aenderung>.\SMTP-Secondary.ps1
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:75

back-to-topforeach($mailbox in $mailboxes){$EmailAddresses = $mailbox.EmailAddresses

$Email ...
+
~~~~~~
Unexpected token '$EmailAddresses' in expression or statement.
At C:\Scripts\SMTP-Aenderung\SMTP-Secondary.ps1:2 char:149

back-to-top... alte-domaene.de") Set-Mailbox $mailbox.Name -EmailAddresses $EmailAddresses

-EmailA ...

back-to-top~~~~~~~~~~~

Unexpected token 'Set-Mailbox' in expression or statement.
+ CategoryInfo : ParserError: (face-smile , ParseException
+ FullyQualifiedErrorId : UnexpectedToken


Ich glaube, ich werde Montag alles zufuß machen, zu erst die neue Adresse per Powershell setzen und die alte noch nachtragen =(

Danke Dir, dir einen schönen Sonntag noch!